创建scala特性的新实例

创建scala特性的新实例,scala,traits,Scala,Traits,请用Scala解释一下 如果我有 trait A 我做不到 val a = new A 但是这个例子, trait DS[-In, +Out]{def apply(i: In): Out} 可以有一个 val t1 = new DS[Any, Int]{def apply(i: Any) = i.toString.toInt} 这是如何允许的?在类主体{}中运行良好 val a = new A {} 所发生的情况是,通过提供一个类主体,您正在创建一个匿名内联类来扩展trait。这样

请用Scala解释一下

如果我有

 trait A
我做不到

val a = new A
但是这个例子,

 trait DS[-In, +Out]{def apply(i: In): Out}
可以有一个

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

这是如何允许的?

在类主体
{}
中运行良好

val a = new A {}

所发生的情况是,通过提供一个类主体,您正在创建一个匿名内联类来扩展trait。

这样我们就可以创建trait的实例吗?@Srinivas是的,前提是所有成员都有一个具体的实现。如果trait已经提供了所有具体的实现,那么您只需要在语法上添加一个空的body
{}
,这就是它看起来的样子,但是从技术上讲,您正在创建一个实现trait的匿名类。也就是说,根据@puhlen的回答,您正在在线定义类。