模块可以用作类型限制吗?

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 风格来工作,即通过调用您需要的方法来期待接口,只是由此产生的错误消息可能有点难以理解明白了。