具有名称空间的Ruby类

具有名称空间的Ruby类,ruby,Ruby,为什么这不是合法的名字间隔?我们经常在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>' $irb

为什么这不是合法的名字间隔?我们经常在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>'
$irb
1.9.3-p194:001>等级F::B
1.9.3-p194:002?>结束
NameError:未初始化的常量F
来自(irb):1
from/Users/bob/.rvm/rubies/ruby-1.9.3-p194/bin/irb:16:in`'
,因为在引用之前未定义
F
。 必须首先将
F
定义为类或模块。试试这个:

模块F;结束#或F级;结束
F类:B类;结束
f=f::B.new#=>#

我想你忘了


第一个do<代码>模块F;结束然后
类别F::B;结束
。。
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
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