在下面的代码中,任何人都可以解释为什么t1:print()有效但(t1):print失败的原因。我试图在不使用中间变量的情况下使(t1 * 3):print()之类的东西工作。
function classTestTable(members)
members = members or {}
local mt = {
__metatable = members;
__index = members;
}
function mt.print(self)
print("something")
end
return mt
end
TestTable = {}
TestTable_mt = ClassTestTable(TestTable)
function TestTable:new()
return setmetatable({targ1 = 1}, TestTable_mt )
end
TestTable t1 = TestTable:new()
t1:print() -- works fine.
(t1):print() -- fails with error "attempt to call a boolean value"
Lua表达式可以跨越多行。
print
(3)
将打印3
所以
t1:print()
(t1):print()
实际上等于
t1:print()(t1):print()
或
local a = t1:print()
local b = a(t1)
b:print()
所以您正在调用t1:print()
的返回值
为避免这种情况,请遵循Egors的建议,并用分号分隔两个语句。
t1:print();(t1):print()