У меня есть черта, которая определяет связанный тип. В функции, я хочу вернуть этот ассоциированный тип, который отличается в зависимости от прилагаемого значения:Специализирующийся связанный тип внутри функции
sealed trait Abstract {
type T
}
class Impl1 extends Abstract {
type T = Int
}
class Impl2 extends Abstract {
type T = Boolean
}
object G {
def get[A <: Abstract] (x: A): A#T = {
x match {
case i1: Impl1 =>
5
case i2: Impl2 =>
true
}
}
}
Проблема заключается в том, что не Scala признать, что в случае согласованного A#T
является Int
или Boolean
, соответственно, и я получите следующее сообщение об ошибке:
Expression of type Int doesn't conform to expected type A#T
Как это решить?
Что вы пытаетесь достичь с помощью такого кода? – metaphori
@metaphori: В моем случае использования у меня есть куча вопросов, которые определяют их тип результата. Затем у меня есть функция 'calculateResponse [Q <: Question] (q: Q): Q # Result', которая дает ответ на вопрос (в зависимости от дополнительного состояния). –
Итак, вы рисуете совпадение по типам вопросов, не так ли? – metaphori