【发布时间】:2015-02-06 16:48:03
【问题描述】:
我想使用一个通用函数来返回给定类型的“默认值”。我在以下案例类构造的帮助下实现了这一点:
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()
这很好用,但我想将其扩展为也适用于从类型构造函数构造的类型。例如,我希望将任何选项类型的默认值设为“None”,并将任何列表类型设为 Nil。我该如何实施?我的第一次尝试:
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
有什么建议可以让它发挥作用吗?
谢谢!
【问题讨论】:
标签: scala case-class type-constructor