【问题标题】:perl6/rakudo: Problem with writing on the loop-variableperl6/rakudo:在循环变量上写入问题
【发布时间】:2011-02-18 14:27:55
【问题描述】:
#!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

【问题讨论】:

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


    【解决方案1】:

    关于你的第二个例子

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

    关于你的第三个例子

    声明

    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$ 
    

    希望这会有所帮助!

    下午

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-23
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      相关资源
      最近更新 更多