为什么Crystal不能在初始化器中推断出这种类型?

时间:2018-01-28 14:39:49

标签: crystal-lang

我有以下代码:

class Triangle
  def initialize(@sides : Array(Int32))
    @set = Set.new(@sides)
  end
end

但是我收到了一个编译错误:

Can't use Set(T) as the type of instance variable @set of Triangle, use a more specific type

我原以为@sides的类型为Array(Int32),因此集合上会有类型推断。我已经阅读the docs,但没有看到答案。

2 个答案:

答案 0 :(得分:2)

实质上,实例变量的类型推断不够智能,无法确定泛型类型。我想它应该是可能的并且可能会在一段时间内实现,但是现在你必须明确地写它。

答案 1 :(得分:1)

你必须设置集合的类型,如下所示:

class Triangle
  def initialize(@sides : Array(Int32))
    @set = Set(Int32).new(@sides)
  end
end