Ошибка Scala: признак существует, но у него нет сопутствующего объекта - PullRequest
0 голосов
/ 01 сентября 2018

У меня ситуация похожа на следующую:

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 голосов
/ 01 сентября 2018

Вы не можете импортировать из определения черты. Но можно импортировать из экземпляра определения черты. 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...