perl6/rakudo:取消引用问题

发布于 2024-10-18 06:55:33 字数 391 浏览 6 评论 0原文

#!perl6
use v6;

my $list = 'a' .. 'f';

sub my_function( $list ) {
    for ^$list.elems -> $e {
        $list[$e].say;
    }
}

my_function( $list );

首先我在 perl5 风格中尝试了这个,但它不起作用:

for @$list -> $e {
    $e.say;
}
# Non-declarative sigil is missing its name at line ..., near "@$list -> "

How can I do this in perl6?

#!perl6
use v6;

my $list = 'a' .. 'f';

sub my_function( $list ) {
    for ^$list.elems -> $e {
        $list[$e].say;
    }
}

my_function( $list );

First I tried this in perl5-style, but it didn't work:

for @$list -> $e {
    $e.say;
}
# Non-declarative sigil is missing its name at line ..., near "@$list -> "

How could I do this in perl6?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

冷清清 2024-10-25 06:55:33

在 Perl 6 中,您不会像这样取消引用变量。只需使用 for $list

但这可能不会做您想做的事情。 'a'..'f' 在 Perl 6 中并不构造列表,而是构造一个名为 Range 的内置数据类型。您可以使用 say $list.WHAT 进行检查。要将其转换为列表并迭代每个元素,您可以使用 for $list.list

You don't dereference variables like this in Perl 6. Just use for $list

But that proably won't do what you want to do. 'a'..'f' doesn't construct a list in Perl 6, but rather a built-in data type called Range. You can check that with say $list.WHAT. To turn it into a list and iterate over each element, you'd use for $list.list

感情洁癖 2024-10-25 06:55:33

这些应该可以工作:

.say for @( $list );
.say for $list.list;
.say for $list.flat;

由于 $list 是一个标量,因此 for $list 将仅迭代单个项目。

These should work:

.say for @( $list );
.say for $list.list;
.say for $list.flat;

Since $listis a scalar, for $list will just iterate over a single item.

椵侞 2024-10-25 06:55:33

现在,Rakudo 2015.02 可以正常工作了。

你最好使用@作为变量名的twigil作为数组。

Perl 6 是上下文相关的语言,因此如果您希望数组充当“真正的数组”,您最好给它一个合适的名称。

#!perl6
use v6;

my @list = 'a' .. 'f';

for @list -> $e { $e.say };

Now, Rakudo 2015.02 works it ok.

You'd better use @ as twigil of variable name as array.

Perl 6 is context sensitive language, so if you want array act as 'true array', you'd better give it a suitable name.

#!perl6
use v6;

my @list = 'a' .. 'f';

for @list -> $e { $e.say };
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文