<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Thinking about this some more, we have to allow re-use of methods names, but can prohibit re-use of other names.  That makes for a simple rule.<div><br></div><div>The key, though, is to remember what makes a method.  Obviously, things declared using the <b>method</b> keyword are methods.  But every <b>def</b> <i>inside an object</i> (which includes inside a module, class or a factory method) also makes a method (possibly confidential, but still a method), and every <b>var</b> makes two methods.  A <b>class</b> declaration is equivalent to a <b>def</b>, so it makes a method, too (and the spec is silent on whether a class is public or confidential by default — I added a note that we need to fix this).</div><div><br></div><div>Parameters never make methods.  Names defined in an import statement make (confidential by default) methods in the module object.</div><div><br></div><div>So, my program 3</div><div><br></div><div><blockquote style="font-family: Times-Roman; margin: 0px 0px 0px 40px; border: none; padding: 0px;"><div>class y.new { … }</div><div><br></div><div>class z.new {</div><div><span class="Apple-tab-span" style="white-space: pre;"> </span>method y { … }</div><div>}</div><div><br></div></blockquote><font face="Times-Roman">should be OK, because <i>y</i> is a method in the module object, and also in the z.new object, and it's OK to have multiple objects with the same method names — indeed, it's the key to the power of OO.   In contrast, Programs 1 & 2 both reuse the name of a parameter for a method.</font></div><div><font face="Times-Roman">The parameter thus becomes inaccessible — there seems no reason to allow this, and it is always possible to rename the parameter, with no effect on any client.</font></div><div><font face="Times-Roman"><br></font></div><div><font face="Times-Roman"><span class="Apple-tab-span" style="white-space:pre">      </span>Andrew</font></div><div><font face="Times-Roman"><br></font></div></body></html>