lua-users home
lua-l archive

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


Same noob on a working email this time :o)


On Wed, Jun 17, 2015 at 8:44 PM, Coda Highland <chighland at gmail.com> wrote:
> On Wed, Jun 17, 2015 at 7:56 PM, voidptr69 at hotmail.com
> <voidptr69 at hotmail.com> wrote:
>>
>> Another noob tought.
>>
>>
>> t = { "a", "b", "c" }
>> s = t:concat()   --  notworking same has s= t.concat(t)
>> s = Table.concat(t)
>>
>> tables don't have metatable...
>> but why ? :o)
>>
>> My guess is 99% of tables in script are used like a default table and could
>> share Table by default..
>> And keep the short calling way valid is that case.
>>
>> When you need to use tables for others purpose;
>> class base or prototype base languages, mockup object, other data structures
>> etc etc ...
>> you will need to define a metatable and add the others functions you need  (
>> constructor, copier, destructor ...)
>> so in those case you need to have an explicit constructor.
>>
>> so why not offer by default, like for String,  a metatable for table ?
>>
>> voidptr :-)
>>
>
> If tables had metatables, then what data structure would you use to
> make objects with customized behavior?
>
> Tables are THE fundamental object type in Lua. Their entire purpose is
> to be simple and generic enough to be able to do anything you want
> with them.



well reread my message :-)
Has I said if you need another use for the table ex. build class or prototype language forms, 
or any kind of muckup objects you will surely, has you shown, build a constructor function and 
creating a link to some metatable using setmetatable.
 
But my question is still why not bind by default tables from the system to Table ?
table are used most of the time as stanard dictionary /table in script :o)


>
> If you want t:concat() to work like table.concat(t), then
> setmetatable(t, table). You could even do something like this:
>
> function make_array(t)
>   return setmetatable(t, table)
> end
>
> local t = make_array { "a", "b", "c" }
> print t:concat()
>
> /s/ Adam
>Er. I screwed that up. It's setmetatable(t, { __index = table }).
>/s/ Adam