Со знаком равенства:
object HelloWorld {
def main(args: Array[String]) = {
println("Hello!")
}
}
Без знака равенства:
object HelloWorld {
def main(args: Array[String]) {
println("Hello!")
}
}
Обе вышеуказанные программы выполняются одинаково. В сообщении блога « Вещи, которые мне не нравятся в Scala» я прочитал, что, когда отсутствует знак равенства, метод будет возвращать Unit
(как и в Java void
), поэтому методы, возвращающие значение, должны использовать знак равенства. Но методы, которые не возвращают значение, можно записать в любом случае.
Как лучше всего использовать знак равенства в методах Scala, которые не возвращают значение?
ОБНОВЛЕНИЕ: начиная с Scala-2.10 предпочтительнее использовать знак равенства. Старый ответ:
Методы, которые возвращают, всегда
Unit
должны использовать синтаксис не равенства. Это позволяет избежать возможных ошибок при переносе реализации в API. Например, вы могли случайно сделать что-то вроде этого:object HelloWorld { def main(args: Array[String]) = { println("Hello!") 123 } }
Конечно, тривиальный пример, но вы понимаете, в чем проблема. Поскольку последнее выражение не возвращается
Unit
, сам метод будет иметь тип возврата, отличный отUnit
. Это доступно в общедоступном API и может вызвать другие проблемы в будущем. С синтаксисом non-equals, неважно, какое последнее выражение, Scala исправляет возвращаемый тип какUnit
.Это также очиститель двух персонажей. :-) Я также склонен думать, что синтаксис не равенства делает код немного легче читаемым. Более очевидно, что рассматриваемый метод возвращает,
Unit
а не какое-то полезное значение.Кстати, есть аналогичный синтаксис для абстрактных методов:
trait Foo { def bar(s: String) }
У метода
bar
есть подписьString=>Unit
. Scala делает это, когда вы опускаете аннотацию типа для абстрактного члена. Еще раз, это чище и (я думаю) легче читать.источник
Вы должны использовать знак равенства в объявлениях вызовов, за исключением определений, возвращающих Unit.
В последнем случае вы можете отказаться от знака равенства. Однако этот синтаксис может быть устаревшим, поэтому его лучше избегать. Использование знака равенства и объявление типа возврата всегда будет работать.
источник
Для методов Scala Style Guide рекомендует использовать синтаксис равенства вместо синтаксиса процедуры.
// don't do this def printBar(bar: Baz) { println(bar) } // write this instead def printBar(bar: Bar): Unit = { println(bar) }
источник
Одно: представьте, что последний оператор метода, который должен возвращать Unit, не возвращает Unit. Тогда использование неравного синтаксиса очень удобно, я надеюсь, что это не будет устаревшим, поскольку я вижу несколько вариантов его использования.
источник
С течением времени стиль по умолчанию менялся, и это упоминалось во многих комментариях к ответам, в официальном руководстве по стилю рекомендуется использовать
=
синтаксис для объявлений функций.источник
для метода, который не имеет возвращаемого значения, способ выражения таких методов заключается в том, чтобы не указывать тип результата и знак равенства, следуя за методом блоком, заключенным в фигурные скобки. В этой форме метод выглядит как процедура, метод, который выполняется только из-за своих побочных эффектов.
источник