列出重复(xx)而不进行评估?

时间:2018-08-09 11:25:31

标签: perl6 raku

列表重复运算符(xx)会在每次重复列表时对其进行评估。例如,

my @input = get() xx 5;

将评估为STDIN的前5行。有什么方法可以让我只重复元素的 value 5次,而不是每次都进行评估?目前,我一直在将其分配给一个变量,然后重复该过程,但那样看来有点麻烦。

my $firstLine = get();
my @firstlineRepeated = $firstLine xx 5;

是否存在前缀或可以让我在一条语句中使用的内容?

3 个答案:

答案 0 :(得分:14)

使用given将其上下文关联到$_是一种相当简洁的方法:

my @input = ($_ xx 5 given get());
say @input;

当我键入hello时,会给出:

[hello hello hello hello hello]

由于given只是上下文化,而不是进行任何类型的定义或真实性测试,因此作为一般模式比andthen更加安全。

答案 1 :(得分:7)

您可以尝试使用andthen运算符:

my @input = (get() andthen $_ xx 5);

从文档中:

  

andthen运算符在遇到第一个运算符时返回空   未定义的参数,否则为最后一个参数。最后一个论据是   照原样返回,根本不检查其定义性。   短路。左侧的结果绑定到$_   右侧,如果右侧是Callable,则作为参数传递,   计数必须为0或1。

答案 2 :(得分:2)

使用词组ENTER也可以

my @input = ENTER { get() } xx 5;