যদিও এমন বৈধ কেস থাকতে পারে যেখানে এ জাতীয় পদ্ধতির ওভারলোডিংগুলি দ্ব্যর্থহীন হয়ে উঠতে পারে, কেন সংকলক কোডটি বাতিল করবেন না যা সংকলনের সময় বা রান টাইমে দু'বারই অস্পষ্ট নয়?
উদাহরণ:
// This fails:
def foo(a: String)(b: Int = 42) = a + b
def foo(a: Int) (b: Int = 42) = a + b
// This fails, too. Even if there is no position in the argument list,
// where the types are the same.
def foo(a: Int) (b: Int = 42) = a + b
def foo(a: String)(b: String = "Foo") = a + b
// This is OK:
def foo(a: String)(b: Int) = a + b
def foo(a: Int) (b: Int = 42) = a + b
// Even this is OK.
def foo(a: Int)(b: Int) = a + b
def foo(a: Int)(b: String = "Foo") = a + b
val bar = foo(42)_ // This complains obviously ...
এই বিধিনিষেধগুলি কিছুটা lিলা করা যায় না তার কোনও কারণ আছে কি?
বিশেষত যখন ভারী ওভারলোড হওয়া জাভা কোডটিকে স্কালার ডিফল্ট আর্গুমেন্টে রূপান্তর করা খুব গুরুত্বপূর্ণ এবং স্পেক / সংকলক স্বেচ্ছাসেবক বিধিনিষেধ আরোপ করে এমন একটি স্কালা পদ্ধতি দ্বারা জাভা পদ্ধতি প্রচুর পরিমাণে প্রতিস্থাপনের পরে খুঁজে বের করা ভাল নয়।
object Test { def a[A](b: Int, c: Int, d: Int = 7): Unit = {}; def a[A](a:String, b: String = ""): Unit = {}; a(2,3,4); a("a");}