Я хочу использовать общую функцию, которая возвращает «значение по умолчанию» для данного типа. Я реализовал это с помощью следующей конструкции класса case:
case class DefaultOp[T](op: () => T)
implicit val defaultString = DefaultOp[String](() => "")
implicit val defaultInt = DefaultOp[Int](() => 0)
implicit val defaultFloat = DefaultOp[Float](() => 0.0f)
implicit val defaultDouble = DefaultOp[Double](() => 0.0d)
// ...
def default[T]()(implicit ev: DefaultOp[T]): T = ev.op()
Это прекрасно работает, но я хотел бы расширить его, чтобы он также работал с типами, созданными из конструктора типов. Например, я хотел бы, чтобы значение по умолчанию для любого типа параметра было «Нет», а для любого типа списка — «Ноль». Как я могу это реализовать? Моя первая попытка:
implicit val defaultOption = DefaultOp[Option[_]](() => None)
компилируется, но не компилируется, когда я использую его в приложении:
error: could not find implicit value for parameter ev: DefaultOp[Option[Float]]
var test: Option[Float] = default[Option[Float]]
^
one error found
Любое предложение, как это можно заставить работать?
Спасибо!