如果您知道数组元素的索引,可以在Perl 6中使用副词:delete
删除该元素:
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
,但是再次必须知道索引。实现似乎是此函数,DELETE-POS
,它需要有效地知道数组索引。因此,问题是,如标题所述,如果您只有元素本身的句柄而不是其索引,那么是否有一种删除数组(或关联数组)元素的方法?
$foo:bar
是一个单一标识符,而不是与:delete
副词相结合的标识符。从语法上讲,:delete
必须跟随一个显式的下标运算符(例如[...]
)才能被解释为副词。我猜你知道这一点,但我想为以后阅读此内容的其他人发表评论。 - raiph