mis*_*tor 4 scala implicit typeclass
我需要定义一个类型类Field,如下所示:
trait Field[A] {
// Additive identity
def zero: A
// Multiplicative identity
def one: A
}
Run Code Online (Sandbox Code Playgroud)
的Numeric类型的类还提供了方法,zero和one.
我希望Numeric在Field需要具有实例的类的任何地方都可以使用实例可用的每个类.例如,以下内容应该有效:
def func[F: Field](f: F) = println(f)
func(2)
Run Code Online (Sandbox Code Playgroud)
你能建议如何实现这个目标吗?我尝试了以下但它不起作用:
scala> implicit def numericToField[N](n: Numeric[N]) = new Field[N] {
| def zero = n.zero
| def one = n.one
| }
numericToField: [N](n: Numeric[N])java.lang.Object with Field[N]
scala> def func[F: Field](f: F) = println(f)
func: [F](f: F)(implicit evidence$1: Field[F])Unit
scala> func(2)
<console>:12: error: could not find implicit value for evidence parameter of type Field[Int]
func(2)
^
Run Code Online (Sandbox Code Playgroud)
小智 7
你几乎得到了它.你只需要进行这个小改动:
scala> implicit def numericToField[N](implicit n: Numeric[N]) = new Field[N] {
| def zero = n.zero
| def one = n.one
| }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
286 次 |
| 最近记录: |