Lua:用括号括起来的类变量的布尔转换的解决方法

问题描述 投票:0回答:1

在下面的代码中,任何人都可以解释为什么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 parentheses
1个回答
1
投票

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()
© www.soinside.com 2019 - 2024. All rights reserved.