[英]Scala: Is there a default class if no class is defined?
根据此 ,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))
}
}
}
}
因此,您的方法hoho
实际上是$line1.$read.$iw.$iw.hoho
。 然后,当您稍后使用hoho("foo")
时,它将重写以添加包和外部对象。
附加说明:对于脚本, -Xprint:typer
( -Xprint:parser
)显示代码被包装在对象Main
的main(args:Array[String])
中的代码块内。 您可以以args
或argv
访问参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.