Почему 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