2014-09-24 72 views
4

我不明白为什么在这个代码中出现语法错误:斯卡拉:“就地”性状没有“新”的关键字传承

“T.scala”文件

trait T 

“A.scala” 文件

class A 

object A { 
    def apply() = new A() 
} 

“other.scala” 文件

val a = new A() with T // ok 
val b = A() with T // syntax error ';' or newline expected 

我可以创建一个新的类实例,但不使用关键字new继承吗?

我还没找到任何关于它的信息。

+1

您不需要将代码拆分为几个文件。所有的部分都会在同一个来源中愉快地生活。 – 2014-09-24 18:58:37

回答

6

A()转换为A.apply()这是一种返回新对象的方法,与new A()不一样。

你基本上是试图做到这一点(这将无法正常工作):

val b = A.apply() 
val c = b with T 

你不能说已经创建的对象上使用with