2010-05-04 47 views
8

基本問題:加強Scala中預定義的方法

爲什麼可以用Scala編寫只是:

println(10) 

爲什麼不讓我需要寫:

Console println(10) 

跟進問題:

我怎樣才能引入一種新的方法「foo」,它像「println」一樣隨處可見和可用?

回答

18

你不需要寫Console在語句的前面,因爲斯卡拉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") 
    } 
} 

(注:只要您導入對象,類或特徵的內容,而不是包對象,也可以將其放入常規對象,類或特徵中,但包對象或多或少意味着用於此目的)。

+1

謝謝。幾乎完美的答案。是否有可能避免導入?我的意思是:我可以增強這個「Predef」對象嗎? – fratnk 2010-05-04 11:15:36

+3

包對象會自動導入到該包中的所有類和對象中。 – missingfaktor 2010-05-04 11:26:06

+1

@fratnk:關於使用StackOverflow:您可以點擊我帖子左上角的複選標記,接受它作爲您問題的答案。 – Jesper 2010-05-04 12:55:12