如何在Ruby中对命名空间类调用namespace方法
我正在模块内编写一些类:如何在Ruby中对命名空间类调用namespace方法,ruby,oop,class,module,Ruby,Oop,Class,Module,我正在模块内编写一些类: module A end module A::B def foo print "foo" end end class A::B::C end A::B::C.new.foo # => NoMethodError: undefined method `foo' for #<A::B::C...> 模块A 结束 模块A::B 德福 打印“foo” 结束 结束 类别A::B::C 结束 A::B::C.new.foo#=>NoMeth
module A
end
module A::B
def foo
print "foo"
end
end
class A::B::C
end
A::B::C.new.foo # => NoMethodError: undefined method `foo' for #<A::B::C...>
模块A
结束
模块A::B
德福
打印“foo”
结束
结束
类别A::B::C
结束
A::B::C.new.foo#=>NoMethodError:#
我如何定义模块B中的方法来调用类C?Ruby中的名称空间并不像您想象的那样工作
class A::B::C
include A::B
end
A::B#foo
是模块A::B
上的一个实例方法,该模块在A
的命名空间中名为B
A::B::C
中获取A::B
的方法,必须像在其他任何地方一样在A::B::C
中包含A::B
。您必须这样做,因为如上所述,名称空间的模块/类没有什么特别之处,它与任何其他模块/类一样对待。就像您写的:
module A::B
def foo
print "foo"
end
class C
end
print 'C.instance_methods : '; p C.instance_methods(false)
#=> C.instance_methods : []
end
C
不会自动继承foo
。只有两种方法可以继承实例方法:
class C
其中super\u class
是返回类的表达式class C
include <some module>
C类
包括
有关超类链的说明,请参见和谢谢。但在A::B::C中是否有不使用include A::B的解决方案?我认为没有其他方法。您是否有理由避免使用
include
?