假设:
// 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
函数的标准方法是什么?
答案 0 :(得分:2)
如果您想将某个隐含的内容纳入范围,通常import
。
def f(s: Something) = {
import s.x
???
}