Ruby - Array.any是什么?(&:无?意味 着?



我是 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?}块。

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

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

或者,用简单的英语来说,电影version_number中的任何一个等同于nil吗?

来自 Symbol#to_proc 文档:

返回一个 Proc 对象,该对象通过 sym 响应给定的方法。

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

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

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

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

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

[1]参考这篇文章 关于 ruby 中的块、过程和 lambda

最新更新