2017-09-19 3 views
1

Je suis (débutant lua/3 jours) en essayant d'appeler une fonction stockée dans une table de lua comme dans le code suivantDans Lua, comment appeler une fonction stockée dans une table en utilisant l'index de la table?

function sayhello() 
    return "hello"; 
end 

function saygoodbye() 
    return "goodbye"; 
end 

funct = { 
    ["1"] = sayhello, 
    ["2"] = saygoodbye, 
    ["name"] = "funct" 
}; 

function say(ft,index) 
    local name = ft.name; 
    print("\nName : " .. name .. "\n"); 
    local fn = ft.index; 
    fn(); 
end 

say(funct,"1"); -- attempt to call local 'fn' (a nil value) 
say(funct,"2"); -- attempt to call local 'fn' (a nil value) 
       -- the Name funct prints in both cases 

Je reçois l'erreur tentative d'appeler « fn » (une valeur nulle) locale Le nom funct est imprimé dans les deux appels say.

Merci

+0

Pas besoin de points-virgules dans Lua. – lhf

Répondre

3

Vous voulez

fn = ft[index] 

parce

fn = ft.index 

est équivalent à

fn = ft["index"] 
+0

Et vous voulez probablement 'print (fn())' à la place sur 'fn()'. – lhf

1

Ceci est décrit comme une erreur de débutant commune dans le livre Programming in Lua. Si vous faites des erreurs, vous savez que vous avez commencé à apprendre. La réponse par @lhf est correcte, mais je voulais juste mettre en évidence le merveilleux livre [Praogramming in Lua] (https://www.lua.org/pil/2.5.html) pour les autres personnes qui visitent cette question.

Une erreur commune pour les débutants est de confondre a.x avec un [x]. La première forme représente un ["x"], c'est-à-dire une table indexée par la chaîne "x". La deuxième forme est une table indexée par la valeur de la variable x. Voir la différence:

a = {} 
x = "y" 
a[x] = 10     -- put 10 in field "y" 
print(a[x]) --> 10  -- value of field "y" 
print(a.x) --> nil  -- value of field "x" (undefined) 
print(a.y) --> 10  -- value of field "y"