#raku
#raku
Вопрос:
Я могу привязать контейнеры к новым именам:
my %h;
my $p := %h{ "a" }{ "b" }{ "c" };
$p = 1;
say %h;
Какие ожидаемые результаты:
{a => {b => {c => 1}}}
Но что, если мне нужно вернуть такой указатель из подпрограммы?
my %h;
sub get-pointer {
my $p := %h{ "a" }{ "b" }{ "c" };
return $p;
};
my $q := get-pointer();
$q = 1;
say %h;
Дает:
Cannot assign to a readonly variable or a value
Эта вещь меня озадачивает — $p.WHERE
и $q.WHERE
дает тот же адрес, так почему же он вдруг доступен только для чтения?
Ответ №1:
Неважно, у меня был некоторый момент туннельного видения, и я хотел, чтобы псевдонимы вели себя как указатели C.
Нашел четкое объяснение здесь, в документации Raku.
Вспомогательный возврат будет возвращать значения, а не контейнеры. Они неизменяемы
Чтобы вернуть изменяемый контейнер, используйте return-rw .