Невозможно получить доступ к scala сопутствующему объекту, но можно создать экземпляр класса - PullRequest
0 голосов
/ 12 марта 2020

У меня есть следующий исходный код:

abstract class Foo{
}
object Foo{
    def foo(f : String) = println(f)
}
object Tester extends App{
    class Bar extends Foo
    val b = new Bar()
    Bar.foo("bar")
}

Когда я пытаюсь запустить его с помощью sbt, я получаю сообщение об ошибке:


Foo.scala:9:5: not found: value Bar
[error]     Bar.foo("bar") // this line won't compile...
[error]     ^
[error] one error found
[error] (Compile / compileIncremental) Compilation failed
[error] Total time: 0 s, completed Mar 12, 2020 10:29:49 AM

Почему я не могу сослаться даже на Bar хотя я объявил это как класс в приложении.

Ответы [ 2 ]

1 голос
/ 12 марта 2020

Почему я не могу сослаться на Bar, даже если я объявил его как класс в приложении.

Вы не ссылаетесь на него как на класс. Вы имеете в виду объект с именем Bar. В области видимости такого объекта нет.

0 голосов
/ 12 марта 2020

object Foo не является объектом-компаньоном class Bar, хотя Bar расширяет class Foo, например

abstract class Foo {
  Foo.foo("woohoo") // OK
}
object Foo {
  private def foo(f : String) = println(f)
}
class Bar extends Foo {
  Foo.foo("woohoo") // Error
}

Объект-компаньон должен иметь такое же имя как соответствующий класс.

...