Я понимаю разницу между методами с нулевым параметром и без параметров, но то, что я действительно не понимаю, - это выбор дизайна языка, который делал необязательные методы.
Недостатки, о которых я могу думать:
- Это сбивает с толку. Каждую неделю или две есть вопросы здесь или в списке рассылки Scala.
- Это сложно; мы также должны различать
() => X
и=> X
. - Это двусмысленно:
x.toFoo(y)
означает, что он говорит, илиx.toFoo.apply(y)
? (Ответ: это зависит от того, какие перегрузки имеют методx
toFoo
и перегрузки по методуFoo
apply
, но если есть столкновение, вы не видите ошибку, пока не попытаетесь ее вызвать.) - Это испортит синтаксис метода метода operator style: вместо аргументов, методов цепочки или в конце, чтобы избежать помех с точкой с запятой, нет символа. С помощью методов zero-arg вы можете использовать пустой список параметров
()
.
В настоящее время вы не можете иметь оба определения в классе: вы получаете сообщение об ошибке, когда метод уже определен. Они также преобразуются в Function0
.
Почему бы просто не сделать методы def foo
и def foo()
точно такими же и разрешить их вызывать с круглыми скобками или без них? Каковы его особенности?