0

为什么这不是合法的命名空间?我们经常在 ActiveRecord 类中使用它。AR 会做一些神奇的事情吗?

$ irb
1.9.3-p194 :001 > class F::B
1.9.3-p194 :002?>   end
NameError: uninitialized constant F
    from (irb):1
    from /Users/bob/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in `<main>'
4

3 回答 3

1

因为F在你引用它之前没有定义。

您必须首先定义F为类或模块。尝试这个:

module F; end # OR class F; end
class F::B; end
f = F::B.new # => #<F::B:0x007fba3c1046d8>
于 2013-09-27T19:27:48.540 回答
0

我认为您忘记了modules

1.9.3p429 :001 > module F
1.9.3p429 :002?>   class B
1.9.3p429 :003?>   end
1.9.3p429 :004?> end
 => nil
1.9.3p429 :005 > F::B.new
 => #<F::B:0x0000000082a230>
1.9.3p429 :006 >

如果模块在类之前定义,它将起作用:

module F; end
class F::B; end
于 2013-09-27T19:31:40.650 回答
-1
2.0.0p247 :001 > module F;end
 => nil 
2.0.0p247 :002 > class F::B;end
 => nil 
2.0.0p247 :003 > F
 => F 
2.0.0p247 :004 > F::B
 => F::B
于 2013-09-27T19:28:25.497 回答