concatenating - string concat lua
¿Cómo formatear una cadena lua con una variable booleana? (3)
Tengo una variable booleana cuyo valor me gustaría mostrar en una cadena con formato. Intenté usar string.format
, pero string.format
algo como lo siguiente para cualquier opción de formato que figura en la referencia del idioma :
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]: ?
Puedo obtener el booleano para mostrar agregando un tostring
,
> print(string.format("%s/n", tostring(true)))
true
Pero eso parece bastante indirecto para esta lua principiante. ¿Hay una opción de formato que he pasado por alto? ¿O debería usar el enfoque anterior? ¿Algo más?
En Lua 5.1, string.format("%s", val)
requiere que tostring( )
manualmente val
con tostring( )
si val
es una cadena o un número.
Sin embargo, en Lua 5.2, string.format
llamará a la nueva función C luaL_tolstring
, que hace el equivalente de llamar a tostring( )
en val
.
Mirando el código de string.format
, no veo nada que admita valores booleanos. Supongo que tostring
es la opción más razonable en ese caso.
Puede redefinir string.format para admitir un especificador %t
adicional que se ejecuta en un argumento:
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
Con esto, puedes usar %t
para cualquier tipo que no sea una cadena:
print(string.format("bool: %t",true)) -- prints "bool: true"