模块可以用作类型限制吗?
Can modules be used as type restrictions?
我正在尝试实现通用优先级队列容器 class,其中要存储的元素必须具有排序 属性。现在我有
class PriorityQueue(T)
...
end
这在我创建 PriorityQueue(Int32)
、PriorityQueue(String)
或 PriorityQueue(Foo)
时有效,其中我将 Foo
实现为 include Comparable(Foo)
,但我想知道是否有PriorityQueue
class 声明 T
必须是 Comparable
.
的一种方式
不,Crystal 目前(从 0.31 开始)不支持限制自由变量的类型。 https://github.com/crystal-lang/crystal/issues/934
正在讨论此功能
与此同时,正如您所指出的那样,它仍然可以通过使用 Ruby 风格来工作,即通过调用您需要的方法来期待接口,只是由此产生的错误消息可能有点难以理解明白了。
我正在尝试实现通用优先级队列容器 class,其中要存储的元素必须具有排序 属性。现在我有
class PriorityQueue(T)
...
end
这在我创建 PriorityQueue(Int32)
、PriorityQueue(String)
或 PriorityQueue(Foo)
时有效,其中我将 Foo
实现为 include Comparable(Foo)
,但我想知道是否有PriorityQueue
class 声明 T
必须是 Comparable
.
不,Crystal 目前(从 0.31 开始)不支持限制自由变量的类型。 https://github.com/crystal-lang/crystal/issues/934
正在讨论此功能与此同时,正如您所指出的那样,它仍然可以通过使用 Ruby 风格来工作,即通过调用您需要的方法来期待接口,只是由此产生的错误消息可能有点难以理解明白了。