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