我正在使用JRuby 1.6.0.RC1。我希望通过提供实现Ruby java.util.Iterators
方法的Facade,在Ruby中更加惯用一些Java库上的each
。
我的第一次尝试基本上是这样的:
def each_property( myJavaObj )
i = myJavaObj.myIterator
while i.hasNext
yield i.next
end
end
但是,当我致电each_property {|p| puts "#{p}"}
时,我收到错误:LocalJumpError: yield called out of block
。
任何人都可以建议我做错了什么,或者指出从Ruby调用Java迭代器的更好模式?
答案 0 :(得分:2)
JRuby内置支持将java.util.Iterator
转换为Ruby Enumerable
。所以你可能也想做一下
myJavaObj.myIterator.each { ... }
代码。
答案 1 :(得分:1)
我不确定,但可能在yield
区域内调用while
会导致此问题。
您可以尝试明确调用该块:
def each_property(myJavaObj, &block)
i = myJavaObj.myIterator
while i.hasNext
block.call i.next
end
end