我想了解以下
之间的区别module XYZ
class A
end
class B
end
end
C类是否继承了A类和B类,或者我必须使用< ?
module YZZ
include XYZ
class C < A
end
end
当我关注时会发生什么?它现在包括所有类,还是只包含A类?
module YZZ
extend XYZ
class C < A
end
end
答案 0 :(得分:0)
这应该有效:
module XYZ
class A
end
class B < A
end
end
然后包括XYZ模块并从A扩展C:
module ABC
include XYZ
class C < A
end
end
答案 1 :(得分:0)
广告1.是的,当您使用#include时,C会继承A和B. #extend适用于类方法。
Ad 2. class C < A
,想一想A只是一个常数,它被分配了一个对象
实例Class作为值。所以,当然,C成为它的子类。
广告3.当您在'module'语句中使用#extend时,self
是模块本身,而XYZ
基本上被包含在它的sigleton类中。
至于你最后的三个项目符号问题,我不明白第一个问题。什么是“从A扩展C类”? class C < XYZ::A
会这样做吗?至于第二个项目符号问题,您可以简单地通过C.extend( XYZ )
扩展C“同时使用A和B”。至于“你怎么能只包括A类”,没有简单的方法只包括模块的一部分。如果您打算单独包含A类,如果它有自己的关注,即使没有B也要解决,请将其放在一个单独的模块中并包含该模块。这称为关注点分离。如果你只想挑选,你可以这样做:
module Something
A = XYZ::A
end
你有一个常量Something :: A指向与XYZ :: A相同的类。