我是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)
或者,用简单的英语,是否相当于nil的movie或version_number中的任何一个?
返回一个Proc对象,它通过sym响应给定的方法.
Run Code Online (Sandbox Code Playgroud)(1..3).collect(&:to_s) #=> ["1", "2", "3"]
所以在你的情况下,这与写作有效:
[movie, version_number].any?{|item| item.nil? }
Run Code Online (Sandbox Code Playgroud)
any?期望传递一个块[1],将对每个项目进行评估,如果块的任何成员的计算结果为true,则返回true.
to_proc当你只想在传递给块的项目上调用单个方法时,Symbol上的方法基本上是一个方便的快捷方式.如上例所示,这导致代码比明确定义块更短.
[1]请参阅本文关于ruby中的块,过程和lambdas
| 归档时间: |
|
| 查看次数: |
204 次 |
| 最近记录: |