2010-05-04 7 views
8

question de base:Améliorer les méthodes pré-définies dans Scala

Pourquoi puis-je écrire à Scala juste:

println(10) 

Pourquoi ne pas avoir besoin d'écrire:

Console println(10) 

Followup question:

Comment puis-je introduire une nouvelle méthode "foo" qui est partout visible et utilisable comme "println"?

Répondre

18

Vous n'avez pas besoin d'écrire le Console devant la déclaration parce que l'objet Scala Predef, qui est automatiquement importé pour tout fichier source Scala, contient des définitions comme celles-ci:

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

Vous ne pouvez pas créer facilement une méthode "globale" qui est automatiquement visible partout dans le monde. Ce que vous pouvez faire est de mettre ces méthodes dans un objet paquet, par exemple:

package something 

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

Mais pour pouvoir l'utiliser, vous auriez besoin d'importer le paquet:

import something.mypackage._ 

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

(Note: Au lieu d'un objet package, vous pouvez également le placer dans un objet, une classe ou un trait régulier, tant que vous importez le contenu de l'objet, de la classe ou du trait - mais les objets du paquet sont plus ou moins destinés à cette fin.

+1

Merci. Réponse presque parfaite. Est-il possible d'éviter l'importation? Je veux dire: Puis-je améliorer cet objet "Predef"? – fratnk

+3

L'objet package est automatiquement importé dans toutes les classes et objets de ce package. – missingfaktor

+1

@fratnk: À propos de l'utilisation de StackOverflow: Vous pouvez cliquer sur la coche en haut à gauche de mon message pour l'accepter comme réponse à votre question. – Jesper