lua-users home
lua-l archive

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


On Wed, Jun 17, 2015 at 7:56 PM, voidptr69@hotmail.com
<voidptr69@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.

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