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