Scala:如果没有定义类,是否有默认类?

Scala:如果没有定义类,是否有默认类?,scala,Scala,根据,Scala方法属于一个类。但是,如果我在REPL或脚本中定义了一个方法,然后使用scala执行,那么该方法属于哪个类 scala> def hoho(str:String) = {println("hoho " + str)} hoho: (str: String)Unit scala> hoho("rahul") hoho rahul 在本例中,该方法属于哪个类?REPL自动将所有语句(实际上是重写语句)包装到对象中。如果您使用-Xprint:typer选项打印中间代码,

根据,Scala方法属于一个类。但是,如果我在REPL或脚本中定义了一个方法,然后使用scala执行,那么该方法属于哪个类

scala> def hoho(str:String) = {println("hoho " + str)}
hoho: (str: String)Unit

scala> hoho("rahul")
hoho rahul

在本例中,该方法属于哪个类?

REPL自动将所有语句(实际上是重写语句)包装到对象中。如果您使用
-Xprint:typer
选项打印中间代码,您可以看到它的作用:

scala> def hoho(str:String) = {println("hoho " + str)}
[[syntax trees at end of typer]]// Scala source: <console>
package $line1 {
  final object $read extends java.lang.Object with ScalaObject {
    def this(): object $line1.$read = {
      $read.super.this();
      ()
    };
    final object $iw extends java.lang.Object with ScalaObject {
      def this(): object $line1.$read.$iw = {
        $iw.super.this();
        ()
      };
      final object $iw extends java.lang.Object with ScalaObject {
        def this(): object $line1.$read.$iw.$iw = {
          $iw.super.this();
          ()
        };
        def hoho(str: String): Unit = scala.this.Predef.println("hoho ".+(str))
      }
    }
  }
}
scala>def hoho(str:String)={println(“hoho”+str)}
[[typer末尾的语法树]]//Scala源:
套餐$line1{
最后一个对象$read使用ScalaObject扩展了java.lang.object{
def this():对象$line1.$read={
$read.super.this();
()
};
最后一个对象$iw使用ScalaObject扩展了java.lang.object{
def this():对象$line1.$read.$iw={
$iw.super.this();
()
};
最后一个对象$iw使用ScalaObject扩展了java.lang.object{
def this():对象$line1.$read.$iw.$iw={
$iw.super.this();
()
};
def hoho(str:String):Unit=scala.this.Predef.println(“hoho”。+(str))
}
}
}
}
因此,您的方法
hoho
实际上是
$line1.$read.$iw.$iw.hoho
。然后,当您稍后使用
hoho(“foo”)
时,它将重写以添加包和外部对象


附加说明:对于脚本,
-Xprint:typer
-Xprint:parser
)显示代码被包装在对象
main
main(args:Array[String])
中的代码块中。您可以访问参数
args
argv

谢谢。如果我将方法定义保存在.scala脚本中并使用scala执行它,是否会发生同样的情况?@Rahul,我已经为脚本添加了信息,机制不同。