将Ruby块传递给Java方法

时间:2014-01-11 03:06:36

标签: java ruby-on-rails ruby jruby block

我需要我的JRuby方法来接收Java方法中发生的事情的报告并采取相应的行动:

def my_long_running_method
  # ... do stuff ...

  jObject.count_all_disk_files do |number_of_files|
    stream.write "#{number_of_files} files found so far."
  end

  # ... do more stuff ...
end

我看到了this question,但我无法理解我需要做什么。

我已经认识Ruby很长一段时间了。这个项目需要是JRuby,因为旧的Java代码需要与新的Ruby代码集成。

1 个答案:

答案 0 :(得分:3)

有关完整参考,请参阅Calling Java From JRuby wiki page,特别是有关closure conversion的部分。对您的问题的简短回答是,您的Java方法count_all_disk_files将需要接受具有单个方法的接口(“功能接口”)。然后JRuby将能够使用块中的代码自动实现该接口。