创建一个scala特性的新实例

Sri*_*vas 0 scala traits

请在Scala中对此进行解释。

如果我有一个

 trait A
Run Code Online (Sandbox Code Playgroud)

我不能做

val a = new A
Run Code Online (Sandbox Code Playgroud)

但是这个特质

 trait DS[-In, +Out]{def apply(i: In): Out}
Run Code Online (Sandbox Code Playgroud)

可以有一个实例

val t1 = new DS[Any, Int]{def apply(i: Any) = i.toString.toInt}
Run Code Online (Sandbox Code Playgroud)

如何允许?

puh*_*len 7

发生的事情是,通过提供一个类主体,您正在创建一个匿名类内联扩展特性。


Rea*_*onk 5

与类身体配合很好{}

val a = new A {}
Run Code Online (Sandbox Code Playgroud)

  • 从语法上看,这就是它的样子,但是从技术上讲,您正在创建一个实现该特征的* anonymous *类。即,您正在按照@puhlen的答案内联定义类。 (2认同)