无法访问伴随对象但​​可以实例化 class

Cannot access companion object but can instantiate class

我有以下源代码:

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

即使我在应用程序中将其声明为 class 为什么我不能引用 Bar。

Why can't I refer to Bar even though I have declared it as a class in the app.

您没有将其称为 class。您指的是一个名为 Bar 对象 。范围内没有这样的对象。

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
}

伴随对象的名称必须与相应的 class 相同