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

时间:2018-02-11 08:09:08

标签: ruby

我是ruby的新手并且正在完成一个教程,但我不确定这行代码意味着什么:

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

根据我的研究,如果数组中的任何元素不是Array.any?false,则nil会返回true。并且&:nil?表示在符号to_proc()上调用:nil?,即:nil?.to_proc,因此该声明等同于

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

相当于

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

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

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

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

或者,用简单的英语, >

1 个答案:

答案 0 :(得分:6)

来自Symbol#to_proc documentation

  

返回一个Proc对象,该对象通过sym。

响应给定的方法
(1..3).collect(&:to_s)  #=> ["1", "2", "3"] 

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

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

any?期望传递一个块 [1] ,将对每个项目进行评估,如果任何成员的块计算结果为true,则返回true。 / p>

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

[1] 在ruby中引用this article关于块,触发器和lambdas