在没有 Raku 中的 (Any) 人工制品的情况下从列表或数组中删除一个元素

Delete an element from a list or array without the (Any) artefact in Raku

我搜索了 Raku 文档和几本书籍和教程以及几篇 Whosebug 帖子,以了解如何从 list/array cleanly 中删除项目,即没有(Any) 代替删除的元素

my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s[$index]:delete;

这导致 [3 18 4 (Any) 92 14 30] 所以我无法对其进行任何操作,例如我无法在其上应用 [+]

有没有办法从 list/array 中删除一个项目而不需要 (任何)

是的。使用 splice 方法:

my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s.splice($index,1);
say @s;  # [3 18 4 92 14 30]

或者你可以使用 Adverb::Eject 模块,所以你可以将上面的代码写成:

use Adverb::Eject;
my @s = <3 18 4 8 92 14 30>;
my $item = 8; 
my $index =  @s.first($item, :k);
@s[$index]:eject;
say @s;  # [3 18 4 92 14 30]