lua-users home
lua-l archive

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


On 21/03/2010, at 3:21 PM, Christopher Eykamp wrote:

> 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)."

Sorry!  That was my mistake.  Clearly (when I look again) the metatable (not a point userdata) is passed as the first argument.

> 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)

So I guess this means that I don't have any idea.  Are there restrictions on mixed types for operators with userdata?

Cheers,
Geoff