Почему метод main() не требует '=' в своем определении в Scala?
Возможный дубликат:
scala: 'def foo = {1}' против 'def foo {1}'
Почему при определении метода main
в Scala нет необходимости использовать =
?
Пример:
def main(args:Array[String]) {
...
Но если кто-то хочет определить другую функцию, он требует этого.
def main(args:Array[String]) **=** {
...
Может кто-нибудь объяснить этот синтаксис?
1 ответ
В Scala знак равенства в объявлении метода сообщает компилятору, что метод возвращает что-то. Если знак равенства не появляется, то компилятор знает, что этот метод ничего не возвращает. Это эквивалентно void
метод в Java. В Scala возврат ничего не означает возврат Unit
,
scala> def noEquals(x: Int) { x + 1 }
noEquals: (x: Int)Unit
scala> val y = noEquals(5)
y: Unit = ()
Сравните с примером, в котором появляется знак равенства:
scala> def hasEquals(x: Int) = { x + 1 }
hasEquals: (x: Int)Int
scala> val z = hasEquals(5)
z: Int = 6
В Java метод main ничего не возвращает (он объявлен как void
, как в public static void main(String[] args)
). Таким образом, версия Scala оставляет знак равенства.
Также обратите внимание, что вы можете написать метод main со знаком равенства, если метод возвращает Unit
(хотя это было бы против конвенции). Кроме того, знак равенства не является "обязательным" для других методов... только тех, которые должны возвращать вещи. Вполне допустимо (и целесообразно) оставлять знак равенства, если вы пишете метод, который ничего не возвращает.