Так вот вопрос, который я спросил перед: Scala: Function returning an unknown typeФункция возвращает динамический тип
Это очень сильно следить за этим.
Ранее я задал вопрос о добавлении типов номеров и возвращении одного с большей точностью. На это ответили классы типов для правил Weak Conformance и указав там тип. Например, WeakConformance [Int, Double] указывает, что будет возвращен double.
Однако при добавлении сложности границ это создает проблемы. Скажем, я хотел сделать класс типа для добавления двух байтов вместе:
class ByteisAddable extends Addable[Byte, Byte] {
def add(x: Byte, y: Byte): ? = {
if(Byte.MaxValue - x < y)
// this is an int
x + y
else
// this is a byte
(x + y).toByte
}
}
Тип класса WeakConformance [Byte, Byte] не может просто определяет один тип, потому что это может быть Int или Byte. То есть вычисление добавления значений должно иметь место до того, как можно указать тип возвращаемого значения. Например, два байта: 10 + 10 должны возвращать байт значения 20. Но два байта: 100 + 100 должны возвращать int или переполнять Byte.MaxValue.
Есть ли лучший способ сделать это? Или есть способ указать тип после вычисления?