Распечатка дополнительных круглых скобок Scala

StackOverflow https://stackoverflow.com/questions/1518102

  •  19-09-2019
  •  | 
  •  

Вопрос

Я написал свой первый пример программы на 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 появится.

Спасибо,

Джефф

Это было полезно?

Решение

Это решит проблему:

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.

Другие советы

Методы, которые имеют тип возврата void в Java, имеют тип возврата Unit в Scala.() — это то, как вы записываете значение единицы.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top