Scala 类无法访问其同伴对象。(带导入和类名)

Scala 类无法访问其同伴对象。(带导入和类名),scala,Scala,我是斯卡拉的新手。我知道伴生对象只是具有相同类名的单例对象。如果一个单例对象就像使用静态方法一样,这意味着我应该能够访问它的方法,而无需在类中创建实例。以下是我的代码片段: class Main { import Main._ def sayHelloWorld() { println("Hello World"); } Main.sayHi //error } object Main { def sayHi() { println("Hi!");

我是斯卡拉的新手。我知道伴生对象只是具有相同类名的单例对象。如果一个单例对象就像使用静态方法一样,这意味着我应该能够访问它的方法,而无需在类中创建实例。以下是我的代码片段:

class Main {

  import Main._

  def sayHelloWorld() {
    println("Hello World");
  }

  Main.sayHi //error
}

object Main {
  def sayHi() {
    println("Hi!");
  }
}

问题1。为什么我不能访问同伴对象的方法(尽管我已经指定了导入)


问题2:如何在不导入的情况下使用对象名并直接访问它?

由于提供的代码由于其他原因无法编译,因此很难猜测您遇到了什么问题。但假设你是这个意思:

  class Main {

    import Main._

    def sayHelloWorld() {
      println("Hello World")
    }
    sayHi()
  }

  object Main {
    def sayHi() {
      println("Hi!")
    }
  }
然后,这将调用伴生对象中的
sayHi()

val m = new Main();                               //> Hi!

由于提供的代码由于其他原因无法编译,因此很难猜测您遇到了什么问题。但假设你是这个意思:

  class Main {

    import Main._

    def sayHelloWorld() {
      println("Hello World")
    }
    sayHi()
  }

  object Main {
    def sayHi() {
      println("Hi!")
    }
  }
然后,这将调用伴生对象中的
sayHi()

val m = new Main();                               //> Hi!

实际的问题是我没有将它们都绑定到另一个对象。(答复) 附加信息:因为伴生对象和类必须在同一个源文件中定义,所以不能在解释器中创建它们。 资料来源:每日scala 解决方法:使用REPL中的某个对象绑定两者 或者正如用户#shadowlands所说
您可以在REPL中创建它们,但需要作为单个:paste命令的一部分来创建它们(键入:help以获取REPL命令列表)

实际的问题是我没有将它们与另一个对象绑定。(答复) 附加信息:因为伴生对象和类必须在同一个源文件中定义,所以不能在解释器中创建它们。 资料来源:每日scala 解决方法:使用REPL中的某个对象绑定两者 或者正如用户#shadowlands所说
您可以在REPL中创建它们,但您需要作为单个:粘贴命令的一部分来创建它们(键入:help以获取REPL命令列表)

测试从何而来?“问题1.为什么我无法访问伴随对象的方法(尽管我已指定了导入)?”您可以。请张贴您正在使用的实际代码<代码>测试没有声明,代码中也没有对sayHiI()的调用。如果(在课堂上)有,那就行了,谢谢!实际的问题是我没有将两者都绑定到一个对象。(REPL)附加信息:由于伴生对象和类必须在同一源文件中定义,因此无法在解释器中创建它们。来源:每日scala解决方法:使用REPL中的某个对象绑定这两个对象您可以在REPL中创建它们,但您需要将它们作为单个
:粘贴
命令的一部分来创建(键入
:help
以获取REPL命令列表)。
测试
从何而来?”问题1.为什么我无法访问伴随对象的方法(虽然我已经指定了导入)?“您可以。请发布您正在使用的实际代码。
test
未声明,并且您的代码中没有对sayHiI()的调用。如果(在类Main中)有,它将起作用。谢谢!实际问题是我没有将两者都绑定到对象上。(REPL)其他信息:由于伴生对象和类必须在同一源文件中定义,因此无法在解释器中创建它们。来源:daily scala解决方法:使用REPL中的某个对象绑定这两个对象您可以在REPL中创建它们,但需要作为单个
:paste
命令的一部分来创建它们(键入
:help
查看REPL命令列表)。是的,很抱歉代码中不应包含该测试。谢谢帮助!是的,很抱歉代码中不应包含该测试。谢谢帮助!