首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Lua:将类变量括在圆括号中时进行布尔转换的解决方法

Lua:将类变量括在圆括号中时进行布尔转换的解决方法
EN

Stack Overflow用户
提问于 2019-12-10 12:33:53
回答 1查看 45关注 0票数 2

在下面的代码中,有人能解释为什么t1:print()可以工作,但(t1):print失败。我正在尝试让(t1 * 3):print()这样的东西在不使用中间变量的情况下工作。

代码语言:javascript
代码运行次数:0
运行
复制
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"
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-12-10 16:05:59

Lua表达式可以扩展到多行。

代码语言:javascript
代码运行次数:0
运行
复制
print




(3)

将打印3

所以

代码语言:javascript
代码运行次数:0
运行
复制
t1:print()
(t1):print()

实际上相当于

代码语言:javascript
代码运行次数:0
运行
复制
t1:print()(t1):print()

代码语言:javascript
代码运行次数:0
运行
复制
local a = t1:print()
local b = a(t1)
b:print()

所以你要调用t1:print()的返回值

为了避免这种情况,遵循Egors的建议,用分号分隔这两个语句。

代码语言:javascript
代码运行次数:0
运行
复制
t1:print();(t1):print()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59260281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档