0

我想了解以下之间的区别

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
  • 从 A 扩展类 C 的最佳方法是什么?
  • 如何同时使用 A 和 B 扩展类 C ?
  • 我怎样才能只包括 A 类?
4

2 回答 2

0

这应该有效:

module XYZ
  class A
  end
  class B < A
  end
end

然后包含 XYZ 模块并从 A 扩展 C:

module ABC
include XYZ
  class C < A
  end
end
于 2013-04-26T10:51:29.413 回答
0

广告1.,是的,当您使用#include 时,C 继承了A 和B。#extend 适用于类方法。

广告 2.class C < A想想 A 只是一个常量,它被赋值为实例 Class 的对象。所以,当然,C 成为它的子类。

广告 3. 当您在“模块”语句中使用 #extend 时,self是模块本身,并且 XYZ 基本上包含在其 sigleton 类中。

至于你最后的三个项目符号问题,我不明白第一个。什么是“从 A 扩展 C 类”?会class C < XYZ::A做吗?至于第二个项目符号问题,您可以通过简单地扩展 C“同时使用 A 和 B” C.extend( XYZ )。至于“你怎么能只包含A类”,没有简单的方法只包含模块的一部分。如果您计划单独包含 A 类,如果即使没有 B,它也有自己的问题要解决,请将其放在单独的模块中并包含该模块。这就是所谓的关注点分离。如果你只是想挑选,你可以这样做:

module Something
  A = XYZ::A
end

你有一个常量Something::A 指向与XYZ::A 相同的类。

于 2013-04-26T10:54:11.597 回答