yield在这个Ruby方法中有什么作用?

时间:2016-08-03 12:41:33

标签: ruby-on-rails ruby

我在遗留应用程序中有一些旧代码,它以我不理解的方式使用val t: Type = ... val clazz = scala.reflect.runtime.currentMirror.runtimeClass(t) ManifestFactory.classType(clazz) match { case m: Manifest[a] => val c = new MyClass(m, m) } 。我可以用一些帮助解释一下。我已经在Ruby yield上阅读了大部分SO结果,但在此上下文中并未理解它。感谢。

yield

1 个答案:

答案 0 :(得分:2)

find_all_from_source显然是用一个块来调用的,该块以某种方式处理find返回的记录。 yield调用阻止每条记录。

这种方法可以用这种单一的方式编写,以避免Ruby难以理解的隐式块语法:

def find_all_from_source(source_id, some_more_arguments, &block)
  joins, conditions = invoke_records_from_source(source_id, some_more_arguments)
  find(:all, :select => “#{self.table_name}”, :joins => joins, :conditions => conditions).each do |record|
    block.call record
  end
end