如何使用上下文边界重写函数?

时间:2015-06-10 00:57:18

标签: scala typeclass

给出以下Addable类型类:

scala> trait Addable[A] {
     |   def add(x: A): A
     | }
defined trait Addable

我为Int创建了一个实例:

scala> class AddInt(x: Int) extends Addable[Int] {
     |   override def add(y: Int) = x + y
     | }
defined class AddInt

然后,我创建了一个隐含的AddInt

scala> implicit val addInt: AddInt = new AddInt(10)
addInt: AddInt = AddInt@1f010bf0

最后,我定义了一个通用函数foo

scala> def foo[A](x: A)(implicit ev: Addable[A]): A = ev.add(x)
foo: [A](x: A)(implicit ev: Addable[A])A

现在,我可以使用addInt

的成功隐式解析来调用它
scala> foo(10)
res0: Int = 20

如何使用context bound表示法定义foo

示例:

def foo[A : Addable]...

1 个答案:

答案 0 :(得分:3)

只需在您自己的示例中定义方法:

def foo[A : Addable](x: A) = implicitly[Addable[A]].add(x)