仔细看看下面的代码:
a = [1,2,3]
n = 2
puts a.find { |i| i == n }
=> 2
a = [1,2,3]
n = [2]
puts a.find { |i| i == n.shift }
=> nil
提示:您可以在此处查看正在运行的版本http://repl.it/OL3
现在解释一下。为什么第二个#find
会返回nil
?
答案 0 :(得分:4)
因为Array#shift
从数组中删除了元素。
因此,第一次执行块时,它正在比较e['name'] == "pets"
,但在下一次迭代中,它正在比较e['name'] == nil
。除非e['name']
在第一次迭代时为"pets"
,否则.find
将返回nil
。
答案 1 :(得分:0)
@Charles Caldwell 正确解释了,为什么你得到了这个结果。现在只需使用以下Array#first
方法,这是安全的:
a.find { |i| i == n.first }