【发布时间】:2018-01-12 16:40:00
【问题描述】:
有没有办法在 Lua 中得到 1 为真,0 为假?
tobool 用 1 或 0 给出真或假,但 tonumber 用真或假给出 nil 值。
【问题讨论】:
有没有办法在 Lua 中得到 1 为真,0 为假?
tobool 用 1 或 0 给出真或假,但 tonumber 用真或假给出 nil 值。
【问题讨论】:
您可以像三元运算符一样组合and 和or 子句。
function bool_to_number(value)
return value and 1 or 0
end
【讨论】:
print(value and 1 or 0)
nil 视为 false,这可能不是 OP 想要的,在这种情况下lhf 的解法更准确。
您也可以这样做:
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)
【讨论】:
true > false 在 Lua 中不等于 true?在许多编程语言中,布尔值是由 2 个值组成的有序集合。
true > false 是什么意思?我想不出使用它是做某事的正确方法的场景。当然,您可以使用它,它在某些语言中运行良好。但我不认为这是lua缺少的功能。此外,在 lua 中您很少需要布尔值,因为您几乎总是可以根据 nil 检查您的对象。
hjpotter92 的答案将任何不同于 nil 的值作为真值(返回 1)。而是取值 true 或 false。
local value = true
print(value == true and 1 or value == false and 0)
-- we add the false check because it would drop 0 in case it was nil
如果你想使用一个函数,那就是它
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))
【讨论】: