lua-users home
lua-l archive

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


On 3/20/2010 7:08 PM, Geoff Leyland wrote:
On 21/03/2010, at 3:04 PM, Christopher Eykamp wrote:

If this works:

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

Shouldn't this:

   newpt = bot:getLoc() * 2

Instead I get an error:  "attempt to perform arithmetic on a userdata value."

Some quick background: bot:getLoc() is a C++ method that returns a pointer to a point stored in C++.   I am binding Lua and C++ using Lunar.   __mul() is a method added in Lua (I have also tried adding it via C++).  How can I get arithmetic methods to work on userdata?

Any ideas?
I know nothing about Lunar, but does

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

work?

Cheers,
Geoff

Curiously, no, though it does get to the __mul() function before giving me this error:

"calling 'getxy' on bad self (Point expected, got table)."

So it's able to find the function properly, but in this case, it seems to get confused as to what the self object is.

This, however, does work:

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

Chris