different concatenating lua string-formatting

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"