Вы используете привязка , а не присвоение для $here
my $root = a => (b => (c=> Nil));
my $here = $root;
while $here.value ~~ Pair {
$here = $here.value;
}
$here = d => Nil;
Когда вы используете связывание, левая и правая стороны являются одним и тем же объектом.И как только они становятся одним и тем же объектом, они не могут измениться (если связанный объект является неизменным).Они неизменны:
my $bound := 3; $bound = 'þorn'; say $bound;
# OUTPUT: «Cannot assign to an immutable value»
3
выше является неизменным, поэтому вы не можете назначить его.В коде, который вы предоставили, вы можете изменить значение путем повторного связывания, пока не получите неизменное значение, последнее Pair
, которое объясняет сообщение.
Просто используйте обычное присваивание, и вы готовы идти,Если вы хотите где-то сохранить исходное значение $root
, просто сделайте это и используйте $root
для навигации по дереву
my $root = a => (b => (c=> Nil));
my $here = $root;
while $root.value ~~ Pair {
$root = $root.value;
}
$here = d => Nil;
say $here;
say $root;
$here
будет по-прежнему равен исходному корню,и $root
перейдет к последней ветке и листу.