将枚举中的每个条目传递给阻塞。返回第一个不为假的块。如果没有对象匹配,则调用 ifnone 并在指定时返回其结果,否则返回 nil。
现在我正在尝试以下内容:
nil.call
#NoMethodError: undefined method `call' for nil:NilClass
# from (irb):13
# from C:/Ruby200/bin/irb:12:in `<main>'
(1..10).detect(x = 2) { |i| i % 5 == 0 and i % 7 == 0 }
#NoMethodError: undefined method `call' for 2:Fixnum
# from (irb):15:in `detect'
# from (irb):15
from C:/Ruby200/bin/irb:12:in `<main>'
现在我的问题是为什么下面没有发生同样的错误:
(1..10).detect(x = nil) { |i| i % 5 == 0 and i % 7 == 0 }
#=> nil
(1..10).detect(x = nil) { |i| p x; i % 5 == 0 and i % 7 == 0 }
#nil
#nil
#nil
#nil
#nil
#nil
#nil
#nil
#nil
#nil
#=> nil