gpt4 book ai didi

lua - 测试两个输入是否为数字且不为空

转载 作者:行者123 更新时间:2023-12-04 18:22:51 40 4
gpt4 key购买 nike

我有一个可以用 0、1 或 2 个参数调用的函数。我想测试一下输入了多少个参数以及它们是否是实际数字。这是代码:

first = tonumber(frame.args[1])
second = tonumber(frame.args[2])

if first then
if first <= second then
return math.random(first, second)
end
return math.random(first)
end
return math.random()

我的想法是,如果它们不是数字(或为空),那么当我调用 tonumber() 时,变量将为假。如果它们都是 NaN,则 <= 可能为真,但它们必须经过作为数字存在的“第一个”,因此它们都必须是数字,并且比较不会使 if 语句短路。如果任何 if 失败,它就会跳到下一个有效的返回。看起来不错?有人看到任何问题吗?

最佳答案

如果 first 是一个数字并且 second 是 nil,你的代码就会中断,因为将数字与 nil 进行比较是错误的。这是一个更正确的版本:

first = tonumber(frame.args[1])
second = tonumber(frame.args[2])

if second and first and (first <= second) then
return math.random(first, second)
elseif first then
return math.random(first)
else return math.random() end

但是这段代码非常脆弱:它不检查参数的类型,也不确保数字是整数。根据它的用途,您可能希望使其更严格。一个真正严格的版本应该是这样的:

local is_int = function(n)
return (type(n) == "number") and (math.floor(n) == n)
end

local first, second = frame.args[1], frame.args[2]

if first == nil then
assert(second == nil)
return math.random()
else
assert(is_int(first))
if second == nil then
return math.random(first)
else
assert(is_int(second))
return math.random(first,second)
end
end

当然,您也可以决定在意外输入时返回 nil 而不是使用断言...

关于lua - 测试两个输入是否为数字且不为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14995125/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com