Ruby Array.find方法问题

Ruby Array.find方法问题,ruby,Ruby,我在ZenTest源代码中找到了这一行: result = @test_mappings.find { |file_re, ignored| filename =~ file_re } 这里的@test\u映射和结果都是数组对象,但我在ruby文档中的数组类上没有找到“find”方法。我也在irb上试过: irb(main):014:0> Array.respond_to? :find => false irb(main):015:0> [1,2,3].find LocalJ

我在ZenTest源代码中找到了这一行:

result = @test_mappings.find { |file_re, ignored| filename =~ file_re }
这里的
@test\u映射
结果
都是数组对象,但我在ruby文档中的数组类上没有找到“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

谁能给我解释一下吗?find方法如何也返回数组对象?提前感谢。

数组
包括
可枚举
模块,该模块添加了方法

在您的示例中,您测试了
数组。请响应
。这将仅对
数组的类方法返回true
find
是一个实例方法,因此必须在类的实例上调用
respond\u to?

>> a = Array.new
=> []
>> a.respond_to? :find
=> true

另一个有时有用的技巧是调用“methods”函数,该函数列出对象实例可用的所有方法,并使用grep方法筛选出特定的方法。它还可以让您很好地了解基类提供了哪些标准方法,而无需参考文档

a = Array.new
=> []
>> a.methods.grep /find/
=> ["find", "find_all"]

如果你不想创建一个实例只是为了看看它是否会响应某些东西,你可以编写Array.instance_方法。include?(:find)很好,Chuck。(虽然,您必须使用字符串而不是符号,例如“find”)@Gordon,我想知道是否有办法让我知道方法调用源自哪个类,例如在本例中,返回“find”方法调用的可枚举性。@eric,问得好。我一时想不出答案。但是,我想去。想发布问题吗?我打赌这里会有人向我们俩解释的。