Вы можете использовать наречие :delete
в Perl 6 чтобы удалить элемент массива, если вы знаете его индекс:
my @letters = <a b c>; @letters[0]:delete; say @letters
# OUTPUT: «[(Any) b c]»
Однако вы не можете этого сделать, если не знаете индекс:
my @letters = <a b c>; $_:delete if $elem eq 'a' for @letters
#ERROR! → Variable '$_:delete' is not declared
Если вы объявите переменную цикла is rw
, проблема останется прежней:
my @letters = <a b c>; for @letters -> $l is rw { $l:delete if $l eq 'a' }; say @letters
#ERROR! → Variable '$l:delete' is not declared
Другого способа удаления элементов массива, похоже, не существует. эквивалент Perl 5 delete
фактически указывает на это наречие. Вы можете использовать splice
, но, опять же, вам нужно знать индекс. Реализация выглядит как этой функцией, _8 _, которому фактически необходимо знать индекс массива.
Итак, вопрос, как и в заголовке, есть ли способ удалить элемент массива (или, если на то пошло, ассоциативного массива), если у вас есть дескриптор только самого элемента, а не его индекса?
$foo:bar
- это единственный идентификатор, а не идентификатор в сочетании с наречием:delete
. Синтаксически:delete
должен следовать за явным оператором нижнего индекса (например,[...]
), чтобы его можно было интерпретировать как наречие. Я предполагаю, что вы знали это, но подумали, что я прокомментирую это для тех, кто прочитает позже. - person raiph   schedule 02.06.2018