小编Eli*_*sen的帖子

Rakudo(Perl6):什么还没有用?

Rakudo:有没有列出所有尚未使用的功能的地方?

perl rakudo perl6 raku

8
推荐指数
2
解决办法
339
查看次数

Perl6/Rakudo的"perldoc -f"

Perl6/Rakudo是否已经存在像perl5的"perldoc -f function_name"这样的内置函数,它为我提供了一个简短快速的使用指令?

documentation perl perl6 raku

8
推荐指数
1
解决办法
461
查看次数

perl6:对于用户定义的变量,我需要@ -sigil吗?

在使用用户定义的变量时,有没有"@" - sigil我不能做的事情?

#!perl6
use v6;

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

$list.list.perl.say;
@list.perl.say; 

$list[2..4].say;
@list[2..4].say;

$list.elems.say;
@list.elems.say;

$list.end.say;
@list.end.say;

say 'OK' if $list ~~ /^c$/;
say 'OK' if @list ~~ /^c$/;
Run Code Online (Sandbox Code Playgroud)

variables sigils perl6 rakudo-star raku

8
推荐指数
1
解决办法
170
查看次数

为什么Perl 6的循环变量声明在外部范围内?

在Perl 6中,在for-style中声明的变量loop位于外部作用域中.这有效并且有记录.

loop ( my $n = 0; $n < 3; $n++ ) {
    put $n;
    }

say "Outside: $n";
Run Code Online (Sandbox Code Playgroud)

$n是该块的外部可见:

0
1
2
Outside: 3
Run Code Online (Sandbox Code Playgroud)

这里是否存在激励技巧,使其与Perl 6的祖先所期望的不同?我没有在设计文档中看到这一点(但尝试在某个时候搜索"循环").我无法想出一个可以让事情变得更容易的例子.

在Perl 5中,同样的事情是严格的错误:

use v5.10;
use strict;

for ( my $n = 0; $n < 3; $n++ ) {
    put $n;
    }

say "Outside: $n";  # Nope!
Run Code Online (Sandbox Code Playgroud)

而且,在C(那些让你这样做),这是一个类似的错误:

#include <stdio.h>

int main () {

   for( int a = 10; a < 20; a = a + 1 …
Run Code Online (Sandbox Code Playgroud)

loops for-loop perl6

8
推荐指数
1
解决办法
292
查看次数

如果你不知道它的索引,删除数组元素的语法是什么?

如果您知道其索引,则可以使用Perl 6中的副词:delete删除数组元素:

my @letters = <a b c>; @letters[0]:delete; say @letters
# OUTPUT: «[(Any) b c]?»
Run Code Online (Sandbox Code Playgroud)

但是,如果您不知道索引,则无法执行此操作:

my @letters = <a b c>; $_:delete if $elem eq 'a' for @letters
#ERROR! ? Variable '$_:delete' is not declared
Run Code Online (Sandbox Code Playgroud)

如果声明循环变量is rw仍然是同一个问题:

my @letters = <a b c>; for @letters -> $l is rw { $l:delete if $l eq 'a' }; say @letters
#ERROR! ? Variable '$l:delete' is not declared
Run Code Online (Sandbox Code Playgroud)

似乎没有其他方法可以删除数组元素.该等效Perl 5的delete点,实际上,该副词.你可以使用,splice但你必须再次知道索引.实现似乎是这个函数, …

arrays perl6

8
推荐指数
2
解决办法
275
查看次数

如何将LEAVE相位器导出到use语句的外部范围

我想创建一个Perl 6模块,它将一个LEAVE移相器"导出" 到use放置语句的作用域.我还没有办法做到这一点.

我认为这需要在EXPORT子内部完成,但如何?EXPORTsub 的默认功能是返回一个Map名称=>要导出的事物的对象映射.据我所知,没有办法反省外部范围.或者我错过了什么?

perl6

8
推荐指数
1
解决办法
144
查看次数

为什么在Perl 6语法原型中没有任何内容?

声明原型时,可以在多方法/子代码周围附加其他代码。举一个愚蠢的例子:

proto sub foo(|) { 'Camelia says “' ~ {*} ~ '!”' }
multi sub foo(1) { "hi"  }
multi sub foo($) { "bye" }

say foo(1) # Camelia says “hi!”
Run Code Online (Sandbox Code Playgroud)

我还没有遇到任何时间(还)在那里我已经感到的巨大有用的,但在另一面,我已经在那里正则表达式中遇到一些/语法的世界里,我偶尔发现自己重复自己在所有的原令牌-这并不是说我不能转移到单独的令牌中,而是增加了层次结构和操作的额外层。比较假设

grammar Bar { 
   token TOP { <meta>* }
   token metastart { '#' }
   proto token meta { <metastart> {*} }
         token meta:name { ( \w* ) }
         token meta:date { (\d**6) }
}
Run Code Online (Sandbox Code Playgroud)

在那里他们只是操作方法除了需要TOPmeta:namemeta:date

grammar Bar { 
   token TOP { …
Run Code Online (Sandbox Code Playgroud)

regex grammar perl6 raku

8
推荐指数
1
解决办法
117
查看次数

标记。^在Perl 6中是什么意思?

我想知道.^Perl 6中sigil的含义。

put "\"10\" : ", "10".^name; 
say "Type : ", (10.Str).^name;
say $object.^parents;
say $object.^methods;
Run Code Online (Sandbox Code Playgroud)

在此代码段中,这.^是什么意思?是name父类的方法还是属性?还是有不同的含义?

perl6 raku

8
推荐指数
2
解决办法
187
查看次数

嵌套列表的Perl 6赋值超级运算符无法正常工作

您好我正在尝试在https://docs.perl6.org/language/operators#Hyper_operators中使用分配超级运算符Perl 6

?my (@one, @two) «=» (<1 2 3>,<4 5 6>);
say @one;
say @two;
# Prints nothing (empty array)

# Expected behaviour:
@one=<1 2 3>;
@two=<4 5 6>;
say @one;
say @two;
# Prints [1 2 3] and [4 5 6]
Run Code Online (Sandbox Code Playgroud)

如何使分配超级操作员正确运行?谢谢。

perl6 raku

8
推荐指数
1
解决办法
103
查看次数

克隆多维数组

我想将多维数组克隆为@a数组@b

我以最直观的方式进行了操作,并提出了以下建议:

    my @a = [0, 0, 0], [0, 0, 0], [0, 0, 0];

    my @b = @a.clone;

    @a[0][1] = 1;
    @b[1][0] = 1;

    say '@a : ' ~ @a.gist;
    say '@b : ' ~ @b.gist;
Run Code Online (Sandbox Code Playgroud)

打印出来的是:

    @a : [[0 1 0] [1 0 0] [0 0 0]]
    @b : [[0 1 0] [1 0 0] [0 0 0]]
Run Code Online (Sandbox Code Playgroud)

那意味着两个数组@a 和@b 是绑定的?

问题:

  1. 为什么数组@a 绑定到数组@b(在这种情况下clone 方法的目的是什么?我们知道clone 的行为与一维数组的意图相同)
  2. 我怎样才能真正将@a 克隆到@b(多维)?
  3. 哪个是最有效的方式(有时间限制)来做到这一点?

arrays clone raku

8
推荐指数
2
解决办法
113
查看次数