Спецификация требует, чтобы и установщик, и получатель были определены, чтобы иметь возможность использовать синтаксический сахар для вызова установщика:
Интерпретация задания
простая переменная x = e зависит от
определение х. Если х обозначает
изменяемая переменная, затем присваивание
изменяет текущее значение х на
результат оценки
выражение е. Тип е есть
ожидается, чтобы соответствовать типу х.
Если х - функция без параметров
определенный в некотором шаблоне, и тот же
шаблон содержит функцию установки
x_ = как член, то назначение x =
е интерпретируется как вызов
x _ = (e) этой установочной функции.
Аналогично, присваивание f .x = e
функция без параметров х
интерпретируется как вызов f .x _ = (e
). Назначение f (args) = e с
применение функции слева от
оператор ‘=’ интерпретируется как f
.update (args, e), то есть вызов
функции обновления, определенной f.
Кроме того, геттер должен быть виден, чтобы использовать его. Я не уверен, указано ли это
Геттер не виден # 1
// error: method x cannot be accessed in x.Test
object x {
class Test {
private[this] var x0: Int = 0
private[Test] def x = x0
def x_=(a: Int) = x0 = a
}
val t = new Test
t.x = 1
}
Геттер не виден # 2
//<console>:11: error: type mismatch; found : x.Test required: ?{val x: ?}
object x {
class Test {
private[this] var x0: Int = 0
private[this] def x = x0
def x_=(a: Int) = x0 = a
}
val t = new Test
t.x = 1
}
Видимый добытчик
object x {
class Test {
private[this] var x0: Int = 0
private[x] def x = x0
def x_=(a: Int) = x0 = a
}
val t = new Test
t.x = 1
}