具有名称空间的Ruby类
为什么这不是合法的名字间隔?我们经常在ActiveRecord类中使用它。AR做了什么神奇的事吗具有名称空间的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
$ 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