lua-users home
lua-l archive

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


See the specification for the __mul operator in the Lua spec (section 2.8).

The implementation of the * operator looks in the metatable for a __mul entry. It does not perform a message send. It does not index the object. Once it finds the entry, it passes it the two operands. In other words, it does more or less exactly this:

	local temp = bot:getLoc()
	newpt = getmetatable(temp).__mul(temp, 2)

On the other hand, the method call approach:

	newpt = bot:getLoc():__mul(2)

Is doing this:

	local temp = bot:getLoc()
	newpt = temp.__mul(temp, 2)

This won't look in the metatable. It will look in the index table of the metatable, but that's a different matter unless the metatable points to itself via the __index entry -- i.e., it's use of the metatable if the object doesn't have a __mul entry looks like the following assuming that __index leads to a table:

	local temp = bot:getLoc()
	newpt = getmetatable(temp).__index.__mul(temp, 2)

Mark