2017-09-10 1 views
1

J'ai un scénario que j'ai besoin de passer les opérateurs dynamiques dans loadstring. C'est là que je l'ai trouvé et je ne comprends pas.pourquoi ai-je obtenu un point décimal en utilisant loadstring dans Lua

S'il vous plaît voir la sortie suivante:

> a = '3' 
> b = '7' 
> operator = '+' 
> loadstring("return a" .. operator .. "b")() 
10.0 -- Why do I get then with a decimal point. 
> loadstring("return 3" .. operator .. 7)() 
10 -- But this one is not? 

Quelqu'un peut-il expliquer ce qui se passe à l'intérieur loadstring car je pensais que je devrais obtenir le même résultat?

+0

Vous calculez une expression sur STRINGS (les chaînes sont implicitement converties en nombres à virgule flottante, c'est l'une des caractéristiques étranges de Lua 5.3). Essayez de les convertir manuellement en nombres: 'loadstring (" return tonumber (a) ".. opérateur ..." tonumber (b) ")()' –

Répondre

4

Le manual dit ce opérateurs arithmétiques sur les chaînes appliquées à:

si les deux opérandes sont des nombres ou des chaînes qui peuvent être converties en chiffres (voir § 3.4.3), puis ils sont convertis en flotte

peut-être que vous voulez

loadstring("return " .. a .. operator .. b)() 

au lieu de 01

loadstring("return a" .. operator .. "b")()