SIP-15 подразумевает, что можно использовать классы значений для определения, например, новых числовых классов, таких как положительные числа. Можно ли закодировать такое ограничение, что базовое> 0 в отсутствие конструктора без необходимости вызова отдельного метода для проверки ограничения (т. Е. Создание допустимого экземпляра такого класса является succint)?валидации в классах значений
Если значение классы имели понятие конструктора, то это может место иметь такие заверения, например, как показано ниже, но это не поддерживается (то есть, ниже код не скомпилируется)
implicit class Volatility(val underlying: Double) extends AnyVal {
require(!underlying.isNaN && !underlying.isInfinite && underlying > 0, "volatility must be a positive finite number")
override def toString = s"Volatility($underlying)"
}
Volatility(-1.0) //should ideally fail
Вначале базовый должен быть 'val' – maks
, а во-вторых,' require' оператор не соответствует эфемеричности класса значений – maks