Если метод возвращает Unit
, вы можете опустить =
(известное как процедуры синтаксиса), но это очень обескуражен (он устарел и даже обсуждался до remove it). От the style guide in the docs:
методы должны быть объявлены в соответствии со следующей схемой:
def foo(bar: Baz): Bin = expr
Процедура Синтаксис: Избегайте синтаксис процедуры, как правило, сбивает с толку очень мало выгоды в краткости.
// don't do this
def printBar(bar: Baz) {
println(bar)
}
// write this instead
def printBar(bar: Bar): Unit = {
println(bar)
}
Там нет никакой разницы в сгенерированный байт-код. Это просто синтаксический сахар. Смотрите раздел 4.6.3 из the Scala specification, где он говорит:
Специальный синтаксис существует для процедур, то есть функции, которые возвращают значение ()
Unit
. Объявление процедуры - это объявление функции, где тип результата опущен. Тип результата затем неявно завершается до типа Unit
.
Поэтому он скомпилирован по тому же коду. Эта функция имеет предупреждение, связанное с этим, если вы используете опцию -Xfuture
:
Предупреждение: синтаксис процедуры устарел. Преобразуйте процедуру foo
в метод, добавив : Unit =
.
В Scala каждый метод возвращает значение (в отличие от других языков, которые имеют методы void
и ничего не возвращают). Методы void
на других языках часто возвращают Unit
в Scala (например, ваш пример printName
).
Вы можете объявить о любом способе как возвращение Unit
, независимо от значения выражения после =
. Это языковая функция, известная как значение, отбрасывающее, подробнее here.
'=' необходимо только тогда, когда вам нужно вернуть значение. – tuxdna