2017-03-13 46 views
1

我知道可以在lua中爲表添加超載操作符。通過這樣做:lua哪些操作符可以超載

foo = { 
    value = 10 
} 
bar = { 
    value = 15 
} 
mt = { 
    __add = function(left,right) 
     left.value = left.value + right.value; 
     return left; 
    end 
} 
setmetatable(foo,mt); 

foo = foo + bar; 
print(foo.value); 

打印:25

但我現在的問題是其他運營商就可以超載,如果__add被用來訪問+運營商,你如何可以訪問其他運營商?

回答

4
其他運營商,你可以重載

完全元方法的列表,它

在Lua手冊中描述: http://www.lua.org/manual/5.1/manual.html#2.8
http://www.lua.org/manual/5.2/manual.html#2.4
http://www.lua.org/manual/5.3/manual.html#2.4

如果__add被用來訪問+運營商,您如何訪問其他運營商?

請參閱手冊。 Metamethods的描述告訴哪個操作員觸發這個確切的元方法。

+0

'__gc'和'__metatable'和'__mode'怎麼樣? – warspyking

+0

由Lua內部事件觸發,或與內部結構管理相關。 Lua語言中沒有明確的操作符可以直接觸發這些metamethods。 – Vlad