Улучшите предопределенные методы в Scala - PullRequest
8 голосов
/ 04 мая 2010

Базовый вопрос:

Почему я могу писать в Scala просто:

println(10)

Почему мне не нужно писать:

Console println(10)

Дополнительный вопрос:

Как я могу ввести новый метод "foo", который везде виден и может использоваться как "println"?

1 Ответ

18 голосов
/ 04 мая 2010

Вам не нужно писать Console перед оператором, потому что объект Scala 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")
    }
}

(Примечание: вместо объекта пакета вы также можете поместить его в обычный объект, класс или признак, если вы импортируете содержимое объекта, класса или свойства - но объекты пакета более или менее предназначены для этого цель).

...