【发布时间】:2016-09-13 17:51:19
【问题描述】:
我的记忆力最差,我忘记了Array#find。
所以我写了一些代码,使用Array#first 来获取第一个匹配条件的项目:
first_even_num = [1,2,3].first { |x| x % 2 == 0 }
这不起作用,它只是返回数组的第一个元素,无论条件是什么。该块根本没有被调用:
[1,2,3].first { |x| exit }
puts "the program did not exit"
我已经接受 Array#first 并没有像想象的那样做,但我很好奇为什么上述示例没有引发错误。
查看2.3.1 源,唯一记录在案的参数是一个表示返回结果数量的整数。
我不太了解 C,但这就是底层 Array#first 方法作为参数签名的内容:
rb_ary_first(int argc, VALUE *argv, VALUE ary)
我只是想知道为什么提供给Array#first 的块如果什么都不做就不会引发错误。
【问题讨论】:
-
您可以将块传递给 any 方法。由方法来调用它或检查它的存在。
-
顺便说一句,我很确定以前有人问过这个问题。谁能找到副本?
-
@Stefan:是的,应该被问过很多次。尝试了几个查询,未能产生匹配。 ://
标签: ruby