2

如何在 Ruby 中获得这种类似 Java 的效果?

class Outer {
  final boolean switch
  public Outer(boolean someSwitch) {
   switch = someSwitch
  }

  class Inner {
    public void doSomething() {
      if (switch) {
        //behave like this
      } else {
        //behave like that
    }
  }
}

没关系,切换必须是最终的;在 Scala 中,它没有。反正。我的 Inner 类位于 Outer 实例的范围内,这就是我喜欢的方式。而且我不必将开关传递给每个单独的内部实例。

在 Ruby 中,我可以将一个类嵌套在另一个类中,但这并不意味着除了命名空间之外的任何东西。怎样才能得到我想要的效果?我知道这个问题有点模糊,所以即使你不确定,也可以随意尝试一下。

4

1 回答 1

4

Ruby 中没有嵌套类,更多信息在这里。但是 Ruby 非常棒,如果它有帮助,你可以做到这一点。

module M
  class Outer
    attr_accessor :foo

    def say_hello()
      puts "Hello Outer '#{@foo}'"
      Inner.new(self).say_hello()
    end

    private

    class Inner

      def initialize(parent)
        @parent = parent
      end
      def say_hello()
        puts "Hello Inner '#{@parent.foo}'"
      end
    end
  end
end


instance = M::Outer.new
instance.foo = "foo values"
instance.say_hello

#=> Hello Outer 'foo values'
#=> Hello Inner 'foo values'
于 2012-11-16T09:38:58.930 回答