Возможно, это связано с возможной двусмысленностью этого определения, так как hello
может быть перегружен.
// inside some class context
def hello(a:String, b:String) = println(a + ":" + b)
def hello(a:String, b:Int) = println(a + ":" + b.toString)
val m1 = hello("aaa", _ ) // which one to choose?
Учтите, что не только вы можете сделать val m1 = hello("aaa", _)
. Там может быть пользователь вашего класса, делающий val my_hello = (new C).hello("aaa", _)
. А затем вы нарушаете совместимость исходного кода, добавляя перегрузку к исходному методу приветствия строки, потому что вдруг уже не понятно, что делать.
Я не уверен, что это единственная причина, но, безусловно, это можно рассматривать как меру безопасности.