Учитывая это определение:
class Foo(var x: String) {}
object Helper {
def model[T](get: ⇒ T, set: T ⇒ Unit) : Model[T] = new Model[T] {
override def getObject(): T = get
override def setObject(obj: T) { set(obj) }
}
}
Я пытаюсь позвонить model
так:
val f = new Foo("initial")
val stringModel = model(f.x, f.x = _)
Но это не работает, компилятор дает мне это, жалуясь на подчеркивание:
missing parameter type for expanded function ((x$1) => f.x = x$1)
Если я изменю определение model
, чтобы использовать два списка параметров, подобных этому:
def model[T](get: ⇒ T)(set: T ⇒ Unit) // rest is unchanged
Тогда я могу назвать это так:
model(f.x)(f.x = _)
Что я нахожу хорошим и лаконичным. Я не против сделать это, хотя это усложняет перегрузку метода. Однако я хотел бы понять, почему второй вариант работает, а первый - нет?