将迭代器赋给变量显然会改变Seq的行为方式。例如。
use v6;
my $i = '/etc/lsb-release'.IO.lines;
say $i.WHAT;
say '/etc/lsb-release'.IO.lines.WHAT;
.say for $i;
.say for '/etc/lsb-release'.IO.lines;结果如下:
(Seq)
(Seq)
(DISTRIB_ID=Ubuntu DISTRIB_RELEASE=18.04 DISTRIB_CODENAME=bionic DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS")
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.1 LTS"所以一旦赋值,我只能得到序列的字符串表示。我知道我可以使用.say for $i.lines获得相同的输出,但是我不明白分配的迭代器和未分配的迭代器/Seq之间的区别。
发布于 2018-09-29 00:02:24
如果您希望能够迭代序列,则需要将其分配给一个位置:
my @i = '/etc/lsb-release'.IO.lines; .say for @i;
或者,您可以告诉迭代器,您希望将给定的对象视为可迭代的:
.say for @$i
或者,您可以将其放入迭代器的列表中:
.say for |$i
https://stackoverflow.com/questions/52558578
复制相似问题