2017-08-21 3 views
2

j'ai une erreur de compilation avec lua:Erreur lors de la définition d'une fonction en utilisant un nom de champ (' « (» prévu à côté de « [ » `)

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 

L'erreur est sur la ligne lorsque Je déclare la function "function action [" moving "]. f()", peut-être parce que j'utilise une table comme ça, merci pour votre aide

+0

(Ma fonction est complète, ne vous inquiétez pas à ce sujet) – Mathurin31

Répondre

4

Vous devez utiliser action["moving"].f = function() au lieu de function action["moving"].f() car cette dernière syntaxe n'est pas autorisée, ancien attribue une fonction anonyme au champ dans une table

3

t.foo est équivalent à/sucre syntaxique pour t["foo"].

Dans votre cas, "moving" et "zooming" sont des chaînes qui sont des identificateurs Lua valides, ce qui signifie que vous pouvez dire function action.moving.f(), ce qui est autorisé et a la même signification. (En particulier, le nom du champ est toujours une chaîne et pas plus fixe ou quelque chose comme ça - vous pouvez toujours dire action[some_var].f et si some_var == "moving" qui vous obtiendrez la fonction que vous avez défini.)

Dans d'autres cas (plus complexe (sous-) noms de champs/clés), vous devrez faire ce que Paul suggère.