Прежде чем что-либо еще сказано, def
не определяет поле, оно определяет метод.
Во втором случае вы можете опустить скобки из-за специфической особенности Scala.Здесь есть два отличия интереса: одно механическое и одно рекомендованного использования.
Начиная с последнего, рекомендуется использовать пустой список параметров при наличии побочных эффектов.Один классический пример - close()
.Вы бы пропустили круглые скобки, если нет никаких побочных эффектов при вызове элемента.
Теперь, как практическое отличие - за пределами возможных странных синтаксических путаниц в угловых случаях (я не говорю, что есть, простопредположения) - структурные типы должны следовать правильному соглашению.
Например, Source
имеет метод close
без скобок, что означает, что структурный тип def close(): Unit
не будет принимать Source
.Аналогично, если я определю структурный метод как def close: Unit
, то объекты Java closeable
не будут приняты.