В большинстве случаев языки не позволяют манипулировать ссылками на примитивы. Eg.:
var a = 0;
var b = a; // value is copied
b++; // b now represents a new value as this is really b = b + 1; so a != b
Хотя манипулирование не примитивами вызовет (иногда разрушительное) манипулирование состоянием, которое отражается во всех переменных (с использованием JS):
var a = [];
var b = a; // b is now a reference to the value stored in a.
a.push(1); // b[0] is now 1 -- b and a are pointing to the same thing.
Это имеет смысл. Я полностью понимаю, почему такие вещи, как String.replace, будут возвращать значение вместо выполнения манипуляций с состоянием.
Мне было интересно, если бы не было языков, позволяющих примитивам манипулировать состоянием. Eg.:
var a = 0;
var b = a; // b references a
b++; // b and a are now = 1.
Мне известен указатель на языках более низкого уровня, и это почти делает то, о чем я говорю, но у меня возникает ощущение, что это только переназначение значения, а не обновление ссылки.
Я также знаю о ссылках на PHP, но поскольку PHP не допускает таких вещей:
$str = "abcd";
$st[0] = "q"; // this causes an error.
Кроме того, при конкатенации нескольких строк в PHP подразумевается цикл $str .= 'var'
для создания новых строк на каждой итерации.
Возможно, я схожу с ума от того, что даже удивляюсь этому, но с увеличением распространенности объектных моделей в качестве фона для переменных, кажется, что это может действительно существовать (это кажется безумно сложным в некоторых отношениях, особенно если вы допускаете 1020 * объект, которым манипулируют, но кажется, что такой синтаксис был бы хорошим источником изучения).