在Scala中增强预定义方法

时间:2010-05-04 10:00:02

标签: scala metaprogramming

基本问题:

为什么我只能用Scala编写:

println(10)

为什么我不需要写:

Console println(10)

后续问题:

如何引入一种新方法“foo”,这种方法在任何地方都可见且可用,如“println”?

1 个答案:

答案 0 :(得分:18)

您不需要在语句前面编写Console,因为Scala Predef对象(自动为任何Scala源文件导入)包含以下定义:

def println() = Console.println()
def println(x: Any) = Console.println(x)

您无法轻松创建自己随处可见的“全局”方法。您可以做的是将这些方法放在包对象中,例如:

package something

package object mypackage {
    def foo(name: String): Unit = println("Hello " + name")
}

但是为了能够使用它,你需要导入包:

import something.mypackage._

object MyProgram {
    def main(args: Array[String]): Unit = {
        foo("World")
    }
}

(注意:您可以将它放在常规对象,类或特征中,而不是包对象,只要您导入对象,类或特征的内容 - 但是包对象或多或少意味着这个目的)。