2009-09-13 9 views
10

Par exemple,Lua: Obtenir le nom littéral du paramètre

function test (a) 
    name = nameof(a) 
    print(name) 
end 

test(def) --should print "def" 

Y a-t-il des astuces lua pour mettre en œuvre quelque chose de similaire à ce qui précède?


Non pas que quelqu'un a besoin d'expliquer pourquoi ils veulent faire quelque chose; Certaines personnes deviennent grincheuses si on ne leur donne pas un exemple concret. Donc:

local function registerTestSuite(suite) 
    if (LUnit) then 
     LUnit:AddTestSuite(
      HotNReady.."_"..GetVariableName(suite), --HotNReady_PizzaTestSuite 
      suite); 
    end; 
end; 
+2

Pourquoi voulez-vous faire cela? Quel problème essayez-vous de résoudre? – lhf

+0

Je veux être en mesure d'écrire declare_object object1. En ce moment je dois écrire declare_object "object1". declare_object est une fonction. – jameszhao00

+1

Je ne sais pas comment ce que vous demandez pourrait vous aider à soulever les accolades dans un appel de fonction. –

Répondre

3

Ce que vous demandez n'est pas possible en pur Lua.

Si vous vraiment besoin de cela, essayez de jouer avec Metalua.

+0

Je ne suis pas sûr pourquoi les réponses aux cas marginaux doivent souvent inclure le scepticisme radical quant à savoir si le questionneur ** vraiment ** doit faire la chose qu'ils ont pris le temps de poser une question sur. Upvoted néanmoins. –

1

Essayez d'utiliser le debug library. Vous pouvez utiliser debug.getlocal ([thread,] level, local) pour obtenir des informations sur une variable locale, y compris son nom.

+0

Il est semi-utilisable. Le "local" dans debug.getlocal ([thread,] level, local) est en fait l'index dans un tableau de variables déclarées locales dans la pile dénotée par level. – jameszhao00

+0

Oui, vous avez raison. Ce n'est pas vraiment la solution polyvalente que vous recherchez. –

+0

N'oubliez pas que le module 'debug' est fortement déconseillé dans le code de production qui n'est pas un débogueur. – RBerteig

Questions connexes