Log In  


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]