lua-users home
lua-l archive

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


On Mon, Jun 22, 2015 at 9:37 PM, voidptr <voidptr69@gmail.com> wrote:
> 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)
>

I have asked this myself...

Let me add one more reason not to do this: not to "leak" methods of
"table" to a sandbox. Compare with "string". Currently preventing
sandboxed (and only sandboxed) code from using string.dump is very
hard.


>
>>
>> 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
>
>
>
>
>



-- 


Best regards,
Boris Nagaev