我是 ruby 的新手,正在学习教程,但我不确定这行代码的含义:
[movie, version_number].any?(&:nil?)
根据我的研究,如果数组中的任何元素不是 false
或 nil
,Array.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?
或者,用简单的英语来说,任何 movie 或 version_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/