lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


All good points (and yes the mutliple returns was a copy-n-paste boo boo).

As I'm still buttoning things up with my project, I may encounter such
issues as you hilite...

But then again, my situation is very specific to my app so I may be able to
cut corners and sidestep potential problems...

ando

>> CarMetatable =
>> {
>> __newindex = function(table, key)
>>    return rawget(Vehicle, key) or  -- "inherit from Vehicle"
>>    return rawget(Engine, key) or   -- "inhereit from Engine"
>>    return rawget(Wheels, key) end  -- "inherent from Wheels"
>> }
> 
> Yup, it is easy enough. A couple of quibbles:
> 
> 1) The use of rawget means that you will not be able to chain
> inheritance. (i.e. if Vehicle inherits from something, then Car
> won't acquire that.) I would just use an index:
> 
> Vehicle[key] or Engine[key] or Wheels[key]
> 
> 2) "return" doesn't actually have a value. I think you probably
> didn't mean to type it three times.
> 
> 3) You have to watch out for the false/nil dichotomy; the code
> as presented will treat false as though it were nil, preventing
> you from inheriting the value of a boolean member (if the
> member's value is false). If that is possible, you need to
> write somewhat more elaborate tests, something like this:
> 
> local rv = Vehicle[key]
> if rv == nil then rv == Engine[key] else return rv end
> if rv == nil then rv == Wheels[key] end
> return rv
> 

-----------------
SpriTec Software
www.spritec.com