Lua:class 变量在括在括号中时进行布尔值转换的解决方法
Lua: Workaround for boolean conversion of a class variable when enclosed in parentheses
在下面的代码中,谁能解释为什么 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()
的 return 值
为避免这种情况,请遵循 Egors 的建议并用分号分隔两个语句。
t1:print();(t1):print()
在下面的代码中,谁能解释为什么 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()