给定以下代码:
为什么 Ruby 在使用 find_all
方法搜索多个事物时需要 or 运算符?即:
x = [1,2,3,4,5]
variable = x.find_all do |x|
x.even?||x.odd?
end
puts variable
我想弄清楚数组中的每个数字是偶数还是奇数。最后,最终放入 variable
的结果,如果它是这两者之一的话。
如果您尝试按顺序编写要查找的条件,那是行不通的:
variable = x.find_all do |x|
x.even?
x.odd?
end
我很想知道为什么第一个示例有效而第二个示例无效。第二个等式,在我看来,我认为你只是按顺序列出它们,试图弄清楚 x 是否为偶数,然后弄清楚 x 是否为奇数。不确定为什么它不起作用。有人可以解释为什么在尝试搜索多个条件时必须使用 or 运算符而不是按顺序列出方法吗?
最佳答案
Ruby 有一个隐式返回,方法或 block 中最后执行的行将是返回的行。考虑到这一点
variable = a.find_all do |x|
x.even?
x.odd?
end
在保留它时只会考虑 x.odd?
行。你可以在没有这样的 or 运算符的情况下做到这一点
variable = a.find_all do |x|
if x.even?
true
else
x.odd?
end
end
为此,如果 x.even?
为真,则 true
将返回,因为那是代码块内运行的最后一行代码。如果 x.even?
为 false,则 x.odd?
将被返回,因为这是 block 内运行的最后一行代码。如果您尝试使用 ||
检查多个条件是有效的,但您也可以这样做。
假设我有数组 a = ['dog', 2, 3.4, 'PIZZA', false, nil]
。假设我想要所有小写字符串、所有整数和所有 nil 值。我可以做到这一点
a.find_all do |i|
if i.is_a? String
i == i.downcase
elsif i.is_a? Numeric
i == i.to_i
else
i.nil?
end
end
这将返回 ['dog', 2, nil]
。
关于ruby - 为什么 Ruby 在搜索多个事物时需要 or 运算符来查找 find_all 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40597985/