@vlavolk вчера тему подкинул.
Когда мы работаем с массивом, руки сами тянутся написать arr.length вместо length(arr). И вот тут раскрылась одна интересная особенность:
arr = [1, 2, 3]
println arr.length
arr.x = 10
println arr.length
arr.length это синтаксический сахар для arr["length"]
Если arr — массив, то индекс принудительно интерпретируется как int. Но, поскольку строку "length" в число мы перевести не можем, то неплохо бы увидеть здесь ошибку, но...
class StringValue {
// ...
public void asInt() {
try {
return Integer.parseInt(value);
} catch (NumberFormatException nfe) {
return 0;
}
}
}
...строковый индекс становился нулём и код отрабатывал без ошибок, давая доступ к первому элементу на чтение и запись. Аналогичный код:
arr = [1, 2, 3]
println arr[0]
arr[0] = 10
println arr[0]
Сейчас это уже исправлено и попытка преобразовать строку не содержащую число в int карается ошибкой исполнения.
__________________