С именованными параметрами, такими как
def f(x : Int = 1, y : Int = 2) = x * y
имена ваших параметров становятся частью интерфейса
f(x=3)
Теперь, если вы хотите изменить имена параметров локально, вы должны сохранить публичное имя параметра:
def f(x : Int = 1, y : Int = 2) = {
val (a,b) = (x,y)
a * b
}
Если это реальная проблема? Есть ли синтаксис, чтобы поддержать это напрямую? Кто другие языки обрабатывают это?
Небольшая иллюстрация проблем, с которыми вы можете столкнуться, если вы поменяете имена параметров, как предложил Джон.
trait X{ def f(x : Int, y : Int) }
class A extends X{
override def f(y : Int, x : Int) = println("" + y + x)
}
val a = new A
scala> a.f(x = 1, y = 2)
21
scala> (a : X).f(x = 1, y = 2)
12