Lua中的布尔值转数字

是否有一种方法在Lua中使用true得到1,使用false得到0? 有一个 tobool 可以将1或0转化为true或false,但是 tonumber 无法将true或false转化为数字,返回为nil。

点赞
用户1190388
用户1190388

你可以像三目运算符一样结合andor子句。

function bool_to_number(value)
  返回 value and 10
end
2018-01-12 16:51:33
用户107090
用户107090

你也可以这样做:

bool_to_number={ [true]=1, [false]=0 }

print(bool_to_number[value])

或者这样做:

debug.setmetatable(true, {__len = function (value) return value and 1 or 0 end})

print(#true)
print(#false)
2018-01-12 21:07:16
用户9137020
用户9137020

答案来自hjpotter92,将除了nil之外的任何值都视为真值(返回1)。相比之下,此代码只取true或false的值。

local value = true
print(value == true and 1 or value == false and 0)
-- 我们添加了false检查,因为如果它是nil,它会丢失0

如果您想使用函数代替,这是函数代码

local value = true
local function bool_to_number(value)
 return value == true and 1 or value == false and 0
end

print(bool_to_number(value))
2018-01-15 12:42:26