Array.find方法问题
我在ZenTest源代码中找到了这一行:
result = @test_mappings.find { |file_re, ignored| filename =~ file_re }
这里的@test_mappings
和result
都是Array对象,但我没有在ruby doc的Array类中找到’find’方法。 我也尝试过irb:
irb(main):014:0> Array.respond_to? :find => false irb(main):015:0> [1,2,3].find LocalJumpError: no block given from (irb):15:in `find' from (irb):15:in `each' from (irb):15:in `find' from (irb):15 irb(main):016:0> [1,2,3].find{|x| x>1} => 2
任何人都可以向我解释一下吗? 怎么能找到方法还返回一个Array对象? 提前致谢。
Array
包含Enumerable
模块,它添加了find
方法。
在您的示例中,您测试了Array.respond_to
。 这只会对Array
类方法返回true。 find
是一个实例方法,所以respond_to?
必须在类的实例上调用。
>> a = Array.new => [] >> a.respond_to? :find => true
另一个有时有用的技巧是调用’methods’函数,该函数列出了对象实例可用的所有方法,并使用grep方法过滤掉特定的东西。 它还可以让您很好地了解基类提供的标准方法,而无需参考文档。
a = Array.new => [] >> a.methods.grep /find/ => ["find", "find_all"]