2010-05-04 6 views
8

Basis Frage:Vordefinierte Methoden Enhance in Scala

Warum ich gerade in Scala schreiben:

println(10) 

Warum muss ich nicht schreiben:

Console println(10) 

Followup Frage:

Wie kann ich eine neue Methode "foo" einführen, die überall sichtbar und nutzbar ist wie "println"?

Antwort

18

Sie brauchen nicht die Console vor der Erklärung zu schreiben, weil die Scala Predef Objekt, das automatisch für jede Scala Quelldatei importiert wird, Definitionen wie diese enthält:

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

Sie können nicht einfach erstellen eine "globale" Methode, die automatisch überall selbst sichtbar ist. Was Sie tun können, solche Verfahren in einem Paketobjekt gesetzt wird, zum Beispiel:

package something 

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

aber in der Lage sein, es zu benutzen, müssen Sie das Paket importieren:

import something.mypackage._ 

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

(Hinweis: Anstatt eines Paketobjekts könnten Sie es auch in ein reguläres Objekt, eine Klasse oder ein Merkmal einfügen, solange Sie den Inhalt des Objekts, der Klasse oder des Merkmals importieren - Paketobjekte sind jedoch mehr oder weniger für diesen Zweck gedacht.

+1

Danke. Fast perfekte Antwort. Gibt es eine Möglichkeit, den Import zu vermeiden? Ich meine: Kann ich dieses "Predef" -Objekt verbessern? – fratnk

+3

Das Paketobjekt wird automatisch in alle Klassen und Objekte in diesem Paket importiert. – missingfaktor

+1

@fratnk: Über die Verwendung von StackOverflow: Sie können auf das Häkchen oben links in meinem Beitrag klicken, um es als Antwort auf Ihre Frage zu akzeptieren. – Jesper

Verwandte Themen