string - lua中string.format函数的 boolean 插值字符是什么

标签 string lua boolean

我正在寻找 string.format 的 boolean 插值字符(正如标题所说)。
我想要一些可以这样工作的东西:

print(string.format("nil == false: %b",(nil==false))

%b 只是一个占位符,你会得到一个错误。我正在寻找'b'。我不能
做就是了:
print("nil == false: " .. (nil==false))

因为 boolean 值不能与字符串连接。我可以做:
val=(nil==false)
if val==false then truth="false" else truth="true" end
print("nil==false: ".. truth)

但是工作量太大了。

最佳答案

如果您想知道如何修改 string.format所以它支持 boolean 值,这是你可以做到的一种方法:

do
local format = string.format
function string.format(str, ...)
  local args = {...}
  local boolargs = {}
  str = str:gsub("%%b", "%%%%b")
  for i = #args, 1, -1 do
    if type(args[i]) == "boolean" then
      table.insert(boolargs, 1, args[i])
      table.remove(args, i)
    end
  end
  str = format(str, unpack(args))

  local j = 0
  return (str:gsub("%%b", function(spec) j = j + 1; return tostring(boolargs[j]) end))
end
end

print(string.format("%s is %b", "nil == false", nil==false))

跟随它可能有点令人困惑。这个想法是 gsub 字符串中的所有“%b”并用双转义替换它 %%b所以格式不会试图解释它。我们让string.format做它的事情,我们得到结果并处理%b我们自己手动。

关于string - lua中string.format函数的 boolean 插值字符是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18677353/

相关文章:

c++ 添加两个 bool 数组

c# - 如何将值添加到数组

Lua 模拟 require 函数

string - Lua的string.find找不到模式

javascript - boolean 测试 HTML 文本框输入与数组值的比较

c# 注册表 System.Byte[] 到字符串

java - 我可以在 String.format 中预编译格式字符串吗? (或者做任何其他事情来更快地格式化日志?)

java - 我怎样才能改变同一个字符串的值?

c++ - 输入到 stringstream 并在单个语句中转换为字符串。没有辅助类可以吗?

c# - 计算 bool 数组中真(或假)元素的数量?