例如:implicit val IntOrd = new Ord [Int ] {...}
如果Ord
是特质,这段代码是否合法?我在一个关于OO类和类型类之间差异的文档中看到了这一点。
答案 0 :(得分:5)
是。您可以在REPL中轻松测试:
scala> trait Ord
defined trait Ord
scala> val x = new Ord {}
x: Ord = $anon$1@32a933c3
这是可能的,因为使用new Ord {}
您不是创建特征的实例,而是创建特征的anonymous subclass的实例。 (链接的解释适用于Java,但它在Scala中的工作方式相同)。