在下面的代码中,有人能解释为什么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"
发布于 2019-12-10 08:05:59
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()
https://stackoverflow.com/questions/59260281
复制相似问题