Этот ответ не означает, что он слишком серьезен, и является лишь доказательством того, что этого можно достичь, используя некоторые хаки.
class Vector(values: Int*) {
val data = values.toArray
def < (i:Int) = new {
def `>_=`(x: Int) {
data(i) = x
}
def > {
println("value at "+ i +" is "+ data(i))
}
}
override def toString = data.mkString("<", ", ", ">")
}
val v = new Vector(1, 2, 3)
println(v) // prints <1, 2, 3>
v<1> = 10
println(v) // prints <1, 10, 3>
v<1> // prints: value at 1 is 10
Используя этот класс, мы можем получить вектор, который использует <>
вместо ()
для «чтения» и доступа для записи.
Компилятор (2.9.0.1) падает, если >
возвращает значение. Это может быть ошибка или результат неправильного использования >
.