fra*_*tnk 8 scala metaprogramming
基本问题:
为什么我只能用Scala写:
println(10)
Run Code Online (Sandbox Code Playgroud)
为什么我不需要写:
Console println(10)
Run Code Online (Sandbox Code Playgroud)
后续问题:
我怎样才能介绍一种新方法"foo",这种方法在任何地方都可见并且可以像"println"一样使用?
Jes*_*per 18
您不需要Console在语句前面编写,因为Scala Predef对象(自动为任何Scala源文件导入)包含以下定义:
def println() = Console.println()
def println(x: Any) = Console.println(x)
Run Code Online (Sandbox Code Playgroud)
您无法轻松创建一个自动可见的"全局"方法.你可以做的是将这些方法放在一个包对象中,例如:
package something
package object mypackage {
def foo(name: String): Unit = println("Hello " + name")
}
Run Code Online (Sandbox Code Playgroud)
但是为了能够使用它,您需要导入包:
import something.mypackage._
object MyProgram {
def main(args: Array[String]): Unit = {
foo("World")
}
}
Run Code Online (Sandbox Code Playgroud)
(注意:您可以将它放在常规对象,类或特征中,而不是包对象,只要您导入对象,类或特征的内容 - 但是包对象或多或少都用于此目的).