假设我想写一个case类Stepper
如下:
case class Stepper(step: Int) {def apply(x: Int) = x + step}
它带有一个很好的toString
实现:
scala> Stepper(42).toString
res0: String = Stepper(42)
但这并不是一个真正的功能:
scala> Some(2) map Stepper(2)
<console>:10: error: type mismatch;
found : Stepper
required: Int => ?
Some(2) map Stepper(2)
一种解决方法是实现Function
特征......
case class Stepper(step: Int) extends (Int => Int) {def apply(x: Int) = x + step}
但是,我不能再免费获得一个好的 toString 实现了:
scala> Stepper(42).toString
res2: java.lang.String = <function1>
那么,问题是:我能拥有这两个世界中最好的吗?有没有一种解决方案,我可以toString
免费提供很好的实现和trait 的实现Function
。换句话说,有没有办法以最终应用case class
语法糖的方式应用线性化?