gpt4 book ai didi

ruby - 比较整数时未定义的方法 <= 为 false

转载 作者:数据小太阳 更新时间:2023-10-29 08:43:40 25 4
gpt4 key购买 nike

我有一段处理命令行参数的简单 Ruby 代码:

if !ARGV.length <= 2
print "clierr: please pass an arg"
end

它给我这个错误信息:

client.rb:rb:1:in `<main>': undefined method `<=' for false:FalseClass (NoMethodError)

据我所知,<=意思是小于或等于。和 ARGV是 Ruby 中的全局参数列表。那为什么会报错呢?

最佳答案

So why is it erroring?

不是因为!是一个方法,你需要用括号调用它。这是由于 operator precedence or order of operations

在 Ruby 中,所有整数的计算结果都是 true ,唯一评估为 false 的值是falsenil , 根据 the documentation .现在,让我们看看您的情况:

if !ARG.length <= 2

在这个例子中,!是 NOT 运算符。执行此操作会隐式地将其强制转换为 bool 运算的 bool 值。因为,如前所述,ARGV.length是一个整数,它被计算为 true ,因此 !truefalse .

!首先发生是因为 !higher precedence<= .在!ARGV.length之后求值后,Ruby 会报告您正在尝试对 false 进行比较和一个整数,这是非法的。您必须使用分组来控制在以下情况下发生哪些操作:

if !(ARGV.length <= 2)

括号会告诉Ruby先对括号内的条件求值,然后继续求值,就像运算顺序一样。所以,里面是求值,然后逻辑NOT发生。

关于ruby - 比较整数时未定义的方法 <= 为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39812121/

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