for-loop - perl6/落语 : Problem with writing on the loop-variable

标签 for-loop raku read-write rakudo-star

#!perl6
use v6;

my $longest = 3;
my @list = <a b c d e f>;

for @list -> $element is rw {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}

这行得通。但是在第二个和第三个中,我收到一条错误消息。我怎样才能让它们发挥作用?

#!perl6
use v6;

my $longest = 3;
my @list = <a b c d e f>;

for @list <-> $element {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}

# ===SORRY!===
# Missing block at line 11, near ""

.

#!perl6
use v6;

my $longest = 3;
my $list = <a b c d e f>;

for $list.list -> $element is rw {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}

# Cannot modify readonly value
#   in '&infix:<=>' at line 1
#   in <anon> at line 8:./perl5.pl
#   in main program body at line 1

最佳答案

关于你的第二个例子

<->可能无法在您使用的 Rakudo Perl 中工作,但它已在更新的版本中得到修复。 (它与深度解析问题有关,需要比我们当时更好的最长 token 匹配算法。)

关于你的第三个例子

声明

my $list = <a b c d e f>;

创建$list作为Seq数据类型,和 Seq元素被认为是不可变的。你真正想要的是 $list成为Array ,如:

my $list = [<a b c d e f>];

有了它,最后一个示例按预期工作:

pmichaud@orange:~/rakudo$ cat x.p6
#!perl6
use v6;

my $longest = 3;
my $list = [<a b c d e f>];

for $list.list -> $element is rw {
    $element = sprintf "%*.*s", $longest, $longest, $element;
    $element.say;
}

pmichaud@orange:~/rakudo$ ./perl6 x.p6
  a
  b
  c
  d
  e
  f
pmichaud@orange:~/rakudo$ 

希望这对您有所帮助!

下午

关于for-loop - perl6/落语 : Problem with writing on the loop-variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5042463/

相关文章:

javascript - 关闭 jscript for 循环到 switch 语句

c# - Parallel.ForEach 问题 - 读写文件 - 文件正在使用错误

javascript - 如果我的文本文件存储在服务器中,如何在 javascript 中读/写文本文件?

c - 在多线程中将多个小片段写入 c 中的临时文件的正确方法是什么?

java - 输入的完美数

php - for循环如何工作?这有什么问题吗?

python - 通过 tkinter 使用 for 循环创建按钮时遇到问题。 (Python)

oop - 如何使用包含 where 的抽象多方法?

exception - 区分CATCH block 中的异常与失败[RAKU]

date - 在 Perl 6 中查找上周五的日期?