为什么这不是合法的命名空间?我们经常在 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>'
为什么这不是合法的命名空间?我们经常在 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>'
F
在你引用它之前没有定义。您必须首先定义F
为类或模块。尝试这个:
module F; end # OR class F; end
class F::B; end
f = F::B.new # => #<F::B:0x007fba3c1046d8>
我认为您忘记了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
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