首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用字段名定义函数时出错(`'(‘expected '['`)

使用字段名定义函数时出错(`'(‘expected '['`)
EN

Stack Overflow用户
提问于 2017-08-22 00:08:40
回答 2查看 854关注 0票数 2

我在编译lua的时候出错了:

代码语言:javascript
复制
local action = {}
action["moving"] = {}
action["zooming"] = {}
action["moving"].state = false
action["zooming"].state = false

action.list = {"moving", "zooming"}

function action["moving"].f()
  if CanAction("moving") and (love.keyboard.isDown("left") or love.keyboard.isDown("right") or love.mouse.isDown("l")) then
    if action["moving"].state == false then
      action["moving"].x, action["moving"].y = camera:mousePosition()
      action["moving"].state = true
    end
    if action["moving"].state then
      if love.mouse.isDown("l") then
        camera:setPosition(-love.mouse.getX()*camera.scaleX + action["moving"].x, -love.mouse.getY()* camera.scaleY + action["moving"].y)
      elseif love.keyboard.isDown("left") then
        camera:move(-10*camera.scaleX, 0)
      elseif love.keyboard.isDown("right") then
        camera:move(10*camera.scaleX, 0)
      end
    end
  else
    ResetAction("moving")
  end
end 

错误是关于当我声明函数"function action“移动”.f()“时的行,可能是因为我使用了这样的表,谢谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-08-22 00:34:24

您应该使用action["moving"].f = function()而不是function action["moving"].f(),因为不允许使用后一种语法,而前者将匿名函数分配给表中的字段。

票数 5
EN

Stack Overflow用户

发布于 2017-08-22 03:09:52

t.foo等同于t["foo"]的/语法糖。

在您的示例中,"moving""zooming"是有效的Lua标识符的字符串,这意味着您可以说function action.moving.f( ),这是允许的,并且具有相同的含义。(特别地,字段名仍然是一个字符串,而不是以某种方式更固定或类似的东西-您仍然可以说action[some_var].f和if some_var == "moving",这将得到您定义的函数。)

在其他情况下(更复杂的(子)字段名/键),您必须按照Paul的建议进行操作。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45801559

复制
相关文章

相似问题

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