给出以下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]...
?
答案 0 :(得分:3)
只需在您自己的示例中定义方法:
def foo[A : Addable](x: A) = implicitly[Addable[A]].add(x)