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 に答える