Ruby - Array.any?(& :nil?) 是什么意思?

标签 ruby

我是 ruby​​ 的新手,正在学习教程,但我不确定这行代码的含义:

[movie, version_number].any?(&:nil?)

根据我的研究,如果数组中的任何元素不是 falsenilArray.any? 将返回 true。 &:nil? 表示在符号 :nil? 上调用 to_proc():nil?.to_proc 所以该语句等同于

[movie, version_number].any?(:nil?.to_proc)

相当于

[movie, version_number].any?{|item| item.nil?}

此外,any? 将集合中的每个元素(在本例中为 Array)传递给 {|item| item.nil?} block 。

当你把它们放在一起时,这行代码是否意味着,在调用数组上的 .any? 之前,在数组中的每个元素上调用 nil?,即是它相当于:

[movie.nil?, version_number.nil?].any?

或者,用简单的英语来说,任何 movieversion_number 是否等同于 nil

最佳答案

来自 Symbol#to_proc documentation :

Returns a Proc object which respond to the given method by sym.

(1..3).collect(&:to_s)  #=> ["1", "2", "3"] 

所以在你的情况下,这实际上与写作相同:

[movie, version_number].any?{|item| item.nil? }

any? 期望传递一个 block [1],它将针对每个项目进行评估,如果该 block 对任何项的评估结果为真,则返回真成员。

Symbol 上的 to_proc 方法基本上是一种方便的快捷方式,当您只想对传递给 block 的项目调用单个方法时。如上例所示,这导致代码比显式定义 block 更短。

[1] 引用this article关于 ruby​​ 中的 block 、proc 和 lambda

关于Ruby - Array.any?(& :nil?) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48729590/

相关文章:

java - 异构数组的意义何在?

ruby - 使用 Ruby,如何将所有数组值转换为给定类型?

ruby - 在组织内共享 ruby​​ 代码

ruby-on-rails - Rails 在 Ubuntu 上安装无法加载 mkmf?

mysql - 数据库中的用户数据列表?

ruby - 使用 gsub 区分大小写的替换

Ruby:线程不运行

ruby-on-rails - 安装发动机的 RSpec 测试路线

ruby - 使用 Ruby 进行测试驱动开发

ruby - 如何计算数组中对象的平均值?