English 中文(简体)
数组查找方法问题
原标题:
  • 时间:2009-01-21 16:49:26
  •  标签:

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

result = @test_mappings.find { |file_re, ignored| filename =~ file_re }

这里的@test_mappingsresult都是数组对象,但我在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方法返回Array对象?谢谢。

最佳回答

Array 包含 Enumerable 模块,该模块添加了 find 方法。

在你的例子中,你测试了Array.respond_to。这只会对Array的类方法返回true。find是一个实例方法,因此respond_to?必须在类的实例上调用。

>> a = Array.new
=> []
>> a.respond_to? :find
=> true
问题回答

另一个有时有用的技巧是调用方法函数,列出对象实例可用的所有方法,并使用grep方法过滤出特定内容。它还可以让您了解基类提供的标准方法,而无需查询文档。

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




相关问题
热门标签