Почему Crystal не может определить этот тип в инициализаторе?

У меня есть следующий код:

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) что на множестве будет вывод типа. Я прочитал документы, но не вижу ответа там.

2 ответа

По сути, вывод типа для переменных экземпляра недостаточно умен, чтобы выяснить этот универсальный тип. Я предполагаю, что это должно быть возможно и, вероятно, будет реализовано некоторое время, но сейчас вам придется написать это явно.

Вы должны установить тип набора, как это:

class Triangle
  def initialize(@sides : Array(Int32))
    @set = Set(Int32).new(@sides)
  end
end
Другие вопросы по тегам