title: Why does Scala need parameterless in addition to zero-parameter methods?
body: <p>I understand the difference between zero-parameter and parameterless methods, but what I don't really understand is the language design choice that made parameterless methods necessary.</p>
  
  <p>Disadvantages I can think of:</p>
  
  <ul>
  <li>It's confusing. Every week or two there are questions here or on the Scala mailing list about it.</li>
  <li>It's complicated; we also have to distinguish between <code>() =&gt; X</code> and <code>=&gt; X</code>.</li>
  <li>It's ambiguous: does <code>x.toFoo(y)</code> mean what it says, or <code>x.toFoo.apply(y)</code>? (Answer: it depends on what overloads there are <code>x</code>'s <code>toFoo</code> method and the overloads on <code>Foo</code>'s <code>apply</code> method, but if there's a clash you don't see an error until you try to call it.)</li>
  <li>It messes up operator style method calling syntax: there is no symbol to use in place of the arguments, when chaining methods, or at the end to avoid semicolon interference. With zero-arg methods you can use the empty parameter list <code>()</code>.</li>
  </ul>
  
  <p>Currently, you can't have both defined in a class: you get an error saying the method is already defined. They also both convert to a <code>Function0</code>.</p>
  
  <p>Why not just make methods <code>def foo</code> and <code>def foo()</code> exactly the same thing, and allow them to be called with or without parentheses? What are the upsides of how it is?</p>