I have the following (simplified) code, defining the __concat metamethod on a table and using it to combine two table definitions, overwriting keys when they overlap:
tmeta = { __concat = function(orig, new) for k,v in pairs(new) do orig[k] = v end return orig end } t = { a=1, b=2, c=3 } setmetatable(t, tmeta) t ..= {b=4, d=5} print(t.a) print(t.b) print(t.c) print(t.d) |
This snippet works completely fine, printing the numbers 1, 4, 3, and 5 as expected. However, having a multi-line table on the right-hand side of the compound operator causes it to break:
t ..= { b=4, d=5 } |
The following form does work fine as a workaround:
t = t .. { b=4, d=5 } |
so this overall approach is still possible, but it uses 1 more token than the compound form.
Also, the exact same behavior seems to occur with other metamethods (e.g. __add and the += operator), so this isn't anything specific to the concatenation operator.
This looks like a duplicate of https://www.lexaloffle.com/bbs/?tid=32670
[Please log in to post a comment]