ruby JRuby的枚举器#to_enum将实例变量重新绑定到另一个上下文?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ruby JRuby的枚举器#to_enum将实例变量重新绑定到另一个上下文?相关的知识,希望对你有一定的参考价值。

class BuggyEnumerator < Enumerator
  def initialize(that)
    @ivar = that
  end
  def each
    return to_enum(:each) unless block_given?
    @ivar.each{|item| yield item }
  end
end


ruby-2.0.0-p195
> BuggyEnumerator.new([1,2,3]).each.to_a
=> [1, 2, 3]
> BuggyEnumerator.new([1,2,3]).each_entry.to_a
=> [1, 2, 3]

ruby-1.9.3-p327
> BuggyEnumerator.new([1,2,3]).each.to_a
=> [1, 2, 3] 
> BuggyEnumerator.new([1,2,3]).each_entry.to_a
=> [1, 2, 3]

jruby-1.7.4
> BuggyEnumerator.new([1,2,3]).each.to_a
=> [1, 2, 3]
> BuggyEnumerator.new([1,2,3]).each_entry.to_a
NoMethodError: undefined method `each' for nil:NilClass
        from (irb):7:in `each'
        from org/jruby/RubyEnumerable.java:378:in `to_a'
        from (irb):11:in `evaluate'
        from org/jruby/RubyKernel.java:1093:in `eval'
        from org/jruby/RubyKernel.java:1489:in `loop'
        from org/jruby/RubyKernel.java:1254:in `catch'
        from org/jruby/RubyKernel.java:1254:in `catch'
        from …/.rvm/rubies/jruby-1.7.4/bin/irb:13:in `(root)'

以上是关于ruby JRuby的枚举器#to_enum将实例变量重新绑定到另一个上下文?的主要内容,如果未能解决你的问题,请参考以下文章

JRuby 的 Java 安全管理器

Jruby 线程上下文实例关联

帮助理解 Ruby 中的产量和枚举器

JRuby 1.7.26 发布,Java 的 Ruby 解释器

Ruby - 优雅地比较两个枚举器

ruby JRuby的YAML