如何解决在 Crystal 中,继承和包含有什么区别?
在大多数 Crystal 文档中,使用类继承,使用 <
语法(例如 https://stackoverflow.com/a/61053311/2954547)。
但是,HTTP::Handler
表示自定义处理程序必须包含HTTP::Handler
模块,而不是继承某个类。
我在 Crystal 文档中找不到关于 include
-ing 模块应该做什么的描述,或者它与 <
-inheritance of classes 有何不同。
解决方法
包含也是继承的一种形式。
主要区别实际上是扩展类型仅限于一个父级。整个程序的扩展继承图是一棵树。 相反,一个类型可以包含多个模块。并且两种类型之间可以有多个包含继承路径。
,包含的描述隐藏在“模块”规范中:https://crystal-lang.org/reference/syntax_and_semantics/modules.html
文档页面中的示例是:
include 使在该模块中定义的类型包含方法作为实例方法:
module ItemsSize
def size
items.size
end
end
class Items
include ItemsSize
def items
[1,2,3]
end
end
items = Items.new
items.size # => 3
还有相关的 extend
,它包括作为类级成员而不是实例级成员的模块成员。
这是一种定义 mixins 或其他命名空间的有用方法,这些命名空间不打算实例化为对象。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。