ruby - 为什么 Ruby 在搜索多个事物时需要 or 运算符来查找 find_all 方法?

标签 ruby operators

给定以下代码:

为什么 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/

相关文章:

ruby - 可以覆盖/实现的 ruby​​ 运算符列表

ruby : Could not find RedCloth-4. 2.9

mysql - 连接rails中现有的MySQL数据库

ruby-on-rails - 发送表单参数哈希作为响应内容

php - 使用数组索引运算符访问类常量的子字符串

java - "|="操作在 C++ 中是什么意思?

javascript - 有人可以解释一下#ifeq ../section key如何使用handlebar.js工作吗

ruby-on-rails - 对同一组数据进行多次计算 : ruby or database?

ruby - 通用 "HTTP GET html page content and recode to UTF-8"程序

javascript - 我在解释 Javascript 运算符的不等式时遇到一些问题