lua-users home
lua-l archive

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




On 22/06/15 06:55 PM, Nagaev Boris wrote:
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.
Meh I can sandbox the whole string metatable...

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







--
Disclaimer: these emails are public and can be accessed from <TODO: get a non-DHCP IP and put it here>. If you do not agree with this, DO NOT REPLY.