使用字段名称定义函数时出错(''('预计在''''附近)

时间:2017-08-21 16:08:40

标签: lua love2d

我有一个使用lua编译的错误:

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 [”moving“]时,错误是关于行的.f()”,也许是因为我使用了这样的表,谢谢你的帮助。

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

t.foo相当于t["foo"]的/ syntactic糖。

在您的情况下,"moving""zooming"是有效Lua标识符的字符串,这意味着您可以说function action.moving.f( ),这是允许的并具有相同的含义。 (特别是,字段名称仍然是一个字符串,而不是更加固定或类似的东西 - 您仍然可以说action[some_var].f,如果some_var == "moving"将获得您定义的函数。)

在其他情况下(更复杂(子)字段名称/键),你必须做保罗所建议的。