2010-05-04 6 views
8

domanda Base:migliorare i metodi predefiniti a Scala

Perché posso scrivere a Scala solo:

println(10) 

Perché non ho bisogno di scrivere:

Console println(10) 

Followup domanda:

Come posso introdurre un nuovo metodo "foo" che è ovunque visibile e utilizzabile come "println"?

risposta

18

Non è necessario scrivere il Console di fronte alla dichiarazione perché l'oggetto Scala Predef, che viene importato automaticamente per qualsiasi file sorgente Scala, contiene le definizioni come questi:

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

Non è possibile creare facilmente un metodo "globale" che è automaticamente visibile ovunque tu. Che cosa si può fare è mettere tali metodi in un oggetto del pacchetto, ad esempio:

package something 

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

Ma per essere in grado di usarlo, avresti bisogno di importare il pacchetto:

import something.mypackage._ 

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

(Nota: Invece di un oggetto pacchetto, potreste anche inserirlo in un oggetto, classe o tratto normale, purché importiate il contenuto dell'oggetto, classe o tratto - ma gli oggetti pacchetto sono più o meno pensati per questo scopo).

+1

Grazie. Risposta quasi perfetta. C'è la possibilità di evitare l'importazione? Voglio dire: posso migliorare questo oggetto "Predef"? – fratnk

+3

L'oggetto del pacchetto viene importato automaticamente in tutte le classi e gli oggetti in quel pacchetto. – missingfaktor

+1

@fratnk: Informazioni sull'utilizzo di StackOverflow: è possibile fare clic sul segno di spunta nella parte in alto a sinistra del mio post per accettarlo come risposta alla domanda. – Jesper