- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我们使用超出数组边界的索引对数组进行切片时,我们得到的结果是 undefined (Any)
当我们传递与惰性列表相同的切片索引时,我们将获得数组/列表的现有值(并且仅此而已):
my @a = ^5;
say @a[^10]; # (0 1 2 3 4 (Any) (Any) (Any) (Any) (Any))
say @a[lazy ^10]; # (0 1 2 3 4)
很明显,切片索引的惰性会影响结果。
my @a = ^5;
my @s1 = ^10;
my @s2 = lazy ^10;
sub postcircumfix:<-[ ]-> (@container, @index) {
my $iter = @index.iterator;
gather {
loop {
my $item := $iter.pull-one;
if $item =:= IterationEnd {
last;
}
with @container[$item] {
take @container[$item]
} else {
@index.is-lazy ?? { last } !! take @container[$item];
}
}
}
}
say @a-[@s1]-; # (0 1 2 3 4 (Any) (Any) (Any) (Any) (Any))
say @a-[@s2]-; # (0 1 2 3 4)
但我想知道我的幼稚算法是否描述了事物在后台计算的方式!
最佳答案
可以在 array_slice.pm6 中找到如何在引擎盖下完成工作的来源。 .
具体可以在L73看到以下内容:
if is-pos-lazy {
# With lazy indices, we truncate at the first one that fails to exists.
my \rest-seq = Seq.new(pos-iter).flatmap: -> Int() $i {
nqp::unless(
$eagerize($i),
last,
$i
)
};
my \todo := nqp::create(List::Reifier);
nqp::bindattr(todo, List::Reifier, '$!reified', eager-indices);
nqp::bindattr(todo, List::Reifier, '$!current-iter', rest-seq.iterator);
nqp::bindattr(todo, List::Reifier, '$!reification-target', eager-indices);
nqp::bindattr(pos-list, List, '$!todo', todo);
}
else {
pos-iter.push-all: target;
}
因此,正如您所猜测的那样,它确实会在列表项不存在后停止。这无疑是因为许多惰性列表是无限的,并且迭代器没有提供一种方法来知道它们是否是无限的(生成器可能是不确定的)。
multi sub postcircumfix:<-[ ]-> (@a, @b) {
lazy gather {
take @a[$_] for @b;
}
}
my @a = ^5;
my @b = lazy gather {
for ^10 -> $i {
# So we can track when elements are evaluated
say "Generated \@b[$i]";
take $i;
}
};
say "Are we lazy? ", @a-[@b]-;
say "Let's get eager: ", @a-[@b]-.eager;
say "Going beyond indices: ", @a-[@b]-[11]
这个的输出是
Are we lazy? (...)
Generated @b[0]
Generated @b[1]
Generated @b[2]
Generated @b[3]
Generated @b[4]
Generated @b[5]
Generated @b[6]
Generated @b[7]
Generated @b[8]
Generated @b[9]
Let's get eager: (0 1 2 3 4 (Any) (Any) (Any) (Any) (Any))
Going beyond indices: Nil
关于slice - 切片索引的惰性如何影响数组列表的切片? [乐],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64121622/
在类 Slip ( https://docs.raku.org/type/Slip ) 的 raku 文档以及“列表、序列和数组”文档(幻灯片部分: https://docs.raku.org/lan
当我们使用超出数组边界的索引对数组进行切片时,我们得到的结果是 undefined (Any) 当我们传递与惰性列表相同的切片索引时,我们将获得数组/列表的现有值(并且仅此而已): my @a = ^
FAQ,Int Raku,如何合并,合并两个哈希? 说: my %a = 1 => 2; my %b = 3 => 4, 5 => 6 获取方式%c = 1 => 2, 3 => 4, 5 => 6
FAQ:在 Raku 中,如何检查 String包含一个子串?在哪里和多少次? 我想要 3 个功能,例如: xxx-bool("az and az and az again", "az"); # T
在语法文档中的以下部分: "Always succeed" assertion 我重现了那里提供的示例,并添加了代码来显示解析机制的每个阶段生成的表: use v6.d; grammar Digifi
我试图将文件名中的三个字母与 1000Genomes 项目匹配,并且仅匹配来自 ethnicity_lists/PEL.txt 之类的字符串中的三个字母。我应该只得到 PEL .字符串的其余部分无关紧
我需要将数千个二进制字节字符串(每个大约 1 兆字节长)转换为 ASC 字符串。这是我一直在做的,而且似乎太慢了: sub fileToCorrectUTF8Str ($fileName) { # b
我是一名优秀的程序员,十分优秀!