 <p>There is no such thing as a reference to a method. When you write <code>m _</code> you are eta-expanding <code>m</code> to a function. A <em>new</em> instance of a function.</p> <p>You <em>can</em> reference check functions (assigned to vals or vars), but by reference only.</p> <pre><code>def m = 1 val mx = m _ val my = m _ // not the same function as `mx` ! val mz = mx scala&gt; mx == mx res4: Boolean = true scala&gt; mx == my res5: Boolean = false scala&gt; mz == mx res6: Boolean = true </code></pre> <p><code>mx</code> is equal to itself (by reference), but while it is logically equivalent to <code>my</code>, it was created by a separate eta-expansion, and therefore does not have reference equality. <code>mz</code> on the other hand does hold the same reference as <code>mx</code>.</p> <p>The bottom line is, comparing a newly eta-expanded method to another function will <em>always</em> yield false. Even if it is itself.</p> <pre><code>scala&gt; m _ == m _ &lt;console&gt;:12: warning: comparing a fresh object using `==' will always yield false m _ == m _ ^ res10: Boolean = false </code></pre>