我是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?
或者,用简单的英语, >
答案 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