J'ai une variable booléenne dont je voudrais afficher la valeur dans une chaîne formatée. J'ai essayé d'utiliser string.format
, mais obtenez quelque chose comme ceci pour tout choix d'option de format répertorié dans référence de langue :
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> print(string.format("%c\n", true))
stdin:1: bad argument #2 to 'format' (number expected, got boolean)
stack traceback:
[C]: in function 'format'
stdin:1: in main chunk
[C]: ?
Je peux obtenir le booléen à afficher en ajoutant un tostring
,
> print(string.format("%s\n", tostring(true)))
true
mais cela semble plutôt indirect à ce lua débutant. Y a-t-il une option de formatage que j'ai ignorée? Ou dois-je utiliser l'approche ci-dessus? Autre chose?
En regardant le code de string.format
, Je ne vois rien qui supporte les valeurs booléennes. Je suppose que tostring
est l'option la plus raisonnable dans ce cas.
Dans Lua 5.1, string.format("%s", val)
vous oblige à envelopper manuellement val
avec tostring( )
si val
est autre chose qu'une chaîne ou un nombre.
Dans Lua 5.2, cependant, string.format
Appellera lui-même la nouvelle fonction C luaL_tolstring
, Ce qui équivaut à appeler tostring( )
sur val
.
Vous pouvez redéfinir string.format pour prendre en charge un %t
spécificateur qui exécute tostring
sur un argument:
do
local strformat = string.format
function string.format(format, ...)
local args = {...}
local match_no = 1
for pos, type in string.gmatch(format, "()%%.-(%a)") do
if type == 't' then
args[match_no] = tostring(args[match_no])
end
match_no = match_no + 1
end
return strformat(string.gsub(format, '%%t', '%%s'),
unpack(args,1,select('#',...)))
end
end
Avec cela, vous pouvez utiliser %t
pour tout type non chaîne:
print(string.format("bool: %t",true)) -- prints "bool: true"