键入成员w / Implicit

时间:2016-09-26 12:57:59

标签: scala implicit

假设:

// type-class
trait Eq[A]

class MyInt 
object MyInt {
  implicit val myIntEq = new Eq[MyInt] {}
}

sealed trait Something {
  type A 
  implicit val x: Eq[A]
}

case object SomethingImpl extends Something {
  override type A = MyInt
  override implicit val x = MyInt.myIntEq
}

然后,我通过以下方式使用了类型成员implicit

scala> def f(s: Something): Eq[s.A] = {
     |   implicit val x: Eq[s.A] = s.x
     |   x
     | }
f: (s: Something)Eq[s.A]

然而,我的直觉告诉我,必须通过implicit val ...将隐含的内容纳入范围,这有点笨拙。

也许我应该在f的伴侣对象中定义Something函数?

定义此f函数的标准方法是什么?

1 个答案:

答案 0 :(得分:2)

如果您想将某个隐含的内容纳入范围,通常import

def f(s: Something) = {
  import s.x
  ???
}