为什么嵌套类的行为在类声明的不同方式之间有所不同?

时间:2013-05-20 11:37:48

标签: ruby class

为什么c.f()以下不是b.f()?我想使用class A::C - 方式声明一个嵌套类,以避免过多的缩进。

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)

2 个答案:

答案 0 :(得分:0)

您可以使用分号将其放在一行中:

class A; class C
  ...
end end

答案 1 :(得分: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