2010-05-04 24 views
8

pregunta Base:Mejorar métodos predefinidos en Scala

¿Por qué puedo escribir en Scala simplemente:

println(10) 

¿Por qué no tengo que escribir:

Console println(10) 

Seguimiento pregunta:

¿Cómo puedo introducir un nuevo método "foo" que esté visible en todas partes y pueda usarse como "println"?

Respuesta

18

No es necesario escribir el Console delante de la declaración porque el objeto Scala Predef, que se importa automáticamente cualquier archivo de origen Scala, contiene definiciones como éstas:

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

No se puede crear fácilmente un método "global" que es automáticamente visible en todos lados. Lo que puede hacer es poner estos métodos en un objeto de paquete, por ejemplo:

package something 

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

Pero para ser capaz de usarlo, que había necesidad de importar el paquete:

import something.mypackage._ 

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

(Nota: En lugar de un objeto paquete, también podría ponerlo en un objeto, clase o rasgo normal, siempre que importe el contenido del objeto, clase o rasgo, pero los objetos del paquete están más o menos destinados a este fin).

+1

Gracias. Respuesta casi perfecta. ¿Existe la posibilidad de evitar la importación? Quiero decir: ¿Puedo mejorar este Objeto "Predef"? – fratnk

+3

El objeto del paquete se importa automáticamente en todas las clases y objetos en ese paquete. – missingfaktor

+1

@fratnk: Acerca del uso de StackOverflow: puede hacer clic en la marca de verificación en la parte superior izquierda de mi publicación para aceptarla como la respuesta a su pregunta. – Jesper

Cuestiones relacionadas