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

Kev*_* L. 5 ruby

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

[movie, version_number].any?(&:nil?)
Run Code Online (Sandbox Code Playgroud)

根据我的研究,Array.any?如果数组的任何元素不是false或者,则返回true nil.并且&:nil?意味着调用to_proc()符号,:nil?:nil?.to_proc声明等同于

[movie, version_number].any?(:nil?.to_proc)
Run Code Online (Sandbox Code Playgroud)

这相当于

[movie, version_number].any?{|item| item.nil?}
Run Code Online (Sandbox Code Playgroud)

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

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

[movie.nil?, version_number.nil?].any?
Run Code Online (Sandbox Code Playgroud)

或者,用简单的英语,是否相当于nilmovieversion_number中的任何一个?

lor*_*non 6

来自Symbol#to_proc文档:

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

(1..3).collect(&:to_s)  #=> ["1", "2", "3"] 
Run Code Online (Sandbox Code Playgroud)

所以在你的情况下,这与写作有效:

[movie, version_number].any?{|item| item.nil? }
Run Code Online (Sandbox Code Playgroud)

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

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

[1]请参阅本文关于ruby中的块,过程和lambdas

  • 它在概念上是正确的.但是实现不会创建一个结果为"nil?"的中间数组.对于大多数枚举,"any?"的实现是短路的,因此只要块的计算结果为true,它就会返回true. (2认同)