2009-10-05 3 views
2

я написал свою первую программу образец SCALA и это выглядит следующим образом:Scala дополнительные круглые скобки распечатке

def main(args: Array[String]) {  
    def f1 = println("aprintln") 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
} 

Выход

applying f1 
aprintln 
() 
done applying f1 

почему появляется дополнительный() Может ли кто-нибудь объяснить? Я думал, что появится просто aprintln.

спасибо,

Джефф

ответ

5

Это позволит устранить проблему:

def main(args: Array[String]) {   
    def f1 = println("aprintln") 
    println("applying f1") 
    (f1 _).apply 
    println("done applying f1") 
}

И так это будет:

def main(args: Array[String]) {   
    def f1 = "aprintln" 
    println("applying f1") 
    println((f1 _).apply) 
    println("done applying f1") 
}

Что происходит здесь вы выполняете функцию f1 с вызовом apply. Функция f1 печатает «aprintln» и возвращает (). Затем вы передаете вывод f1, который является (), на другой звонок println. Вот почему вы видите дополнительную пару паранов на консоли.

Пустые круглые скобки имеют тип Unit в Scala, который эквивалентен void в Java.

+0

А, да, очень глупо от меня. Я не думал об этом, поскольку компилятор Java не позволил мне это сделать. Спасибо. –

2

Методы, которые имеют тип возвращаемого аннулируются в Java имеют тип возврата блока в Scala.() - это то, как вы пишете значение единицы.

В вашем коде f1 вызывает println напрямую. Поэтому, когда вы вызываете f1 и передаете его результат println, вы оба печатаете строку в теле f1 и печатаете ее результат, который tostring'ed as().

+0

Имеет смысл и согласуется с другим ответом. Спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^