如何在Lua中将字符串转换为布尔值。

6

我收到了来自另一个脚本的数据,其中变量的值为“false”或“true”。我想将此值转换为lua数据类型中的true或false。目前,我可以用以下繁琐的方式实现:

if value == "false" then
  value=false
elseif value == "true" then
  value=true
end

有没有一种最简单的方法将这个转换,就像将字符串转换为整数tonumber(“1”)

5个回答

15

你也可以这样做:

stringtoboolean={ ["true"]=true, ["false"]=false }
print(stringtoboolean[s])

这是枚举类型吗?很好的解决方案,但我讨厌 [ ] - ToiletGuy
不是,这是一个Lua表:https://www.lua.org/manual/5.4/manual.html#3.4.9 -- 给定的代码只是定义了一个将字符串形式映射到布尔形式的表,然后在其中查找值。 - ToxicFrog
8
没有 [ ],你无法深入了解 Lua 中最重要的数据类型。因此最好停止对它的厌恶;-) - Piglet
您可以设置一个调用元方法并使用 stringtoboolean(s),如果您更喜欢的话。 - lhf

2

由于我经常要对收到的每个数据进行转换,手动将字符串转换为布尔值像我上面发布的那样会使代码变得冗余。因此,我创建了一个函数来解决这个问题:

function toboolean(str)
    local bool = false
    if str == "true" then
        bool = true
    end
    return bool
end

所以我可以做到这一点

toboolean("true") 

除了"true"字符串之外,其他任何内容都会变成false


8
由于这会将"true"返回为true,将其他所有内容返回为false,因此您可以简化它为:function toboolean(str) return str == "true" end - ToxicFrog

2
不行,因为"false"也会被评估为true,所以如果你想让"false"被评估为false,你需要手动进行转换。

2

然后总是有

 str=="true" and true or false

lua模拟三元运算符,或用于大小写不敏感

 (str and string.lower(str))=="true" and true or false

短路评估将在str==nil时防止异常


1

不区分大小写的方式:

function str_to_bool(str)
    if str == nil then
        return false
    end
    return string.lower(str) == 'true'
end

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接