Scala错误:特征存在,但没有伴随对象

时间:2018-08-31 21:38:14

标签: scala import traits

我遇到类似以下情况:

package A

trait A1{
 def a2 = 0
}

package B

trait B1{
 def b2 = {
  import A.A1._ // Error: trait A1 exists, but it has no companion object
  a2
 }
}

这可能不是一个好的设计,但将来会更改。有办法解决这个错误吗?

1 个答案:

答案 0 :(得分:1)

您无法从特征定义中导入。但是可以从特征定义的实例中导入。 A1是特质

问题

import A.A1._ 

以上说法无效。导入A.A1._时,Scala编译器正在寻找对象A1,但是A1是特征,没有A1可用。因此它抱怨A1特质没有伴侣对象。

  

伴侣对象是与类/特征定义同名的对象

如果要将特征A1(特征定义)导入作用域。随便

import A.A1

您可以导入对象/伴侣对象的内部

object Bar {      
  val x = 1    
}

import Bar._

现在x在范围内可用

如果Foo是对象,则import Foo._有效

Scala REPL

scala> trait A { val a = 1}
defined trait A

scala> val foo = new A{}
foo: A = $anon$1@9efcd90

scala> import foo._
import foo._

scala> a
res0: Int = 1