2

c.f()以下のように動作しないのはなぜb.f()ですか? class A::Cインデントが多すぎるのを避けるために、ネストされたクラスを宣言するために -wayを使用したいと思います。

class A
  CONSTANT = 1
end

class A
  class B
    p self # => A::B
      def f
        print CONSTANT, "\n"
      end
  end
end

class A::C
  p self # => A::C
  def f
    print CONSTANT, "\n"
  end
end

b = A::B.new
b.f() # => 1
c = A::C.new
c.f() # => `f': uninitialized constant A::C::CONSTANT (NameError)
4

2 に答える 2

0

セミコロンを使用して 1 行にまとめることができます。

class A; class C
  ...
end end
于 2013-05-20T11:58:08.543 に答える
0

定数の前に を付けることで、これを回避できます。A::

class A
  CONSTANT = 1
end

class A
  class B
    def f
      puts A::CONSTANT
    end
  end
end

class A::C
  def f
    puts A::CONSTANT
  end
end

b = A::B.new
b.f() #=> 1
c = A::C.new
c.f() #=> 1
于 2013-05-20T12:05:16.293 に答える