Questions tagged «raku»

有关与Raku编程语言(以前称为Perl 6)有关的问题。

2
如何将参数传递给变量引用的令牌?
我可以通过直接使用令牌名称来轻松使用令牌签名: my token t ( $x ) { $x }; 'axb' ~~ / 'a' <t: 'x'> 'b' /; # match 'axb' ~~ / 'a' <t( 'x' )> 'b' /; # match 但是,当令牌存储在变量中时,我还没有找到一种方法来执行此操作: my $t = token ( $x ) { $x }; 'axb' ~~ / 'a' <$t: 'x'> 'b' /; …
10 raku 

1
为什么Raku在多维数组上表现不佳?
我很好奇,为什么Raku在处理多维数组方面表现不佳。我进行了快速测试,使用Python,C#和Raku初始化了二维矩阵,而后面的耗时惊人地长。 对于乐 my @grid[4000;4000] = [[0 xx 4000] xx 4000]; # Elapsed time 42 seconds !! 对于Python table= [ [ 0 for i in range(4000) ] for j in range(4000) ] # Elapsed time 0.51 seconds C# int [,]matrix = new int[4000,4000]; //Just for mimic same behaviour for(int i=0;i<4000;i++) for(int …
10 performance  raku 

1
为什么Duration.new可以与Int一起使用但不能与Rat一起使用?
对于持续时间,为什么我需要手动将老鼠强制为实数,而不是整数? 这是Rakudo 2020.01版,建立在实现Perl 6.d的MoarVM 2020.01.1版上。在OSX上。 say $v.WHAT; #(Int) $v = Duration.new( $v ); say $v; #20 my $w = 20.0; say $w.WHAT; #(Rat) $w = Duration.new( $w.Real ); say $w; #20 my $x = 20.0; say $x.WHAT; #(Rat) $x = Duration.new( $x ); say $x; #hangs
9 raku 

1
制作自定义声明符
假设我相当定期地使用一组特定的样板: class Foo { method abc($a: $b, $c, +@d) is pure { use Slang::Bar; … } method xyz($a: $b, $c, +@d) is pure { use Slang::Bar; … } method blarg($a: $b, $c, +@d) is pure { use Slang::Bar; … } } 我宁愿说: class Foo is/does Bar { bar abc { …
9 raku 

3
如何传播和捕获Raku中另一个线程抛出的错误?
从单独的线程传播错误的最佳方法是什么(例如,启动块,Proc :: Async或包含这些错误的子线程)。简单地将产生新线程的代码包装在try / CATCH块中是行不通的,而使用await仅取决于子例程的返回值(即,子返回self不适用于await方法)。
9 raku 

1
如何将2元素列表做成哈希表?
我有一个由两个元素组成的列表的列表,例如您想要通过(1..5) Z (20..24)哈希表生成的内容(在此示例中,您可以通过哈希表获取的内容{1 => 20, 2 => 21, 3 => 22, 4 => 23, 5 =>24}。我可以“手工”完成此操作,但这不是不太优雅,我敢肯定Raku会采用惯用的方式。我想出的优雅选择是: my @a = (1..5) Z (20..24); my %a; for @a -> @x { %a{@x[0]} = @x[1];
9 raku 


1
如何在Raku中模拟wc -l
在perl 5中,可以wc -l使用oneliner 进行仿真: perl -lnE 'END {say $.}' test.txt 如何在Raku上实现此功能 如果您尝试实现此目的: raku -e 'say "test.txt".IO.open.lines.elems' 事实证明它很慢并且占用大量内存 复制信息: $ wget http://eforexcel.com/wp/wp-content/uploads/2017/07/1500000%20Sales%20Records.zip $ unzip "1500000 Sales Records.zip" $ mv "1500000 Sales Records.csv" part.txt $ for i in `seq 1 10`; do cat part.txt >> test.txt ; done $ du -sh test.txt …
9 perl  raku 

1
从列表或数组中删除没有Raku中(Any)伪像的元素
我搜索了Raku文档,几本书籍和教程以及几篇Stackoverflow帖子,以学习如何从列表/数组中干净地删除项目,即不用(Any)代替被删除元素 my @s = <3 18 4 8 92 14 30>; my $item = 8; my $index = @s.first($item, :k); @s[$index]:delete; 结果为[3 18 4(Any)92 14 30],因此我无法对其进行任何操作,例如,我无法对其进行应用[+]。 有没有办法从列表/数组中删除没有该项的项目(任何)?
9 raku 

1
如何在Raku中使承诺超时?
我知道我可以安排Promise在一定时间内保存 my $promise = Promise.in($seconds); 但是我该如何安排它被破坏?具体来说,我正在考虑一个将“超时”的承诺,这样它可以保留一定的时间,否则将失败。 我可以用另一个做Promise,就像这样: my $promise = Promise.new; ... Promise.in($seconds).then: { $promise.break }; 但这感觉有点...浪费。有一个更好的方法吗?
9 promise  raku 

2
在CATCH块中区分异常和失败[RAKU]
我们知道,可以通过CATCH块来处理故障。 在下面的示例中,我们在“ other-sub”中创建一个“ AdHoc”失败,并在CATCH块中(在“ my-sub”中)处理异常。 sub my-sub { try { CATCH { when X::AdHoc { say 'AdHoc Exception handled here'; .resume } default {say 'Other Exception'; .resume} } my $b = other-sub(); $b.so ?? $b.say !! 'This was a Failure'.say; } } sub other-sub { fail 'Failure_X' } my-sub(); 输出如下: …

1
可以在Raku中导出子集吗?
我想定义一些子集,并在其中添加一些约束和一些die声明,以提供一些有用的错误消息。我不想在使用这些子集的模块的顶部定义它们,而是想将它们放在另一个模块中,同时也不要使用它们的完全限定名称(FQN)。例如,我有 unit module Long::Module::Subsets; subset PosInt where ($_ ~~ Int || "The value must be an integer") && ($_ > 0 || "The value must be greater than 0") is export ; # other subsets ... 但是得到了 ===SORRY!=== Error while compiling /tmp/637321813/main.pl6 Two terms in a row ... 那不起作用,我想我可以做一些如下的事情,但是我想知道是否可以避免: use …
9 module  subset  raku 

3
Raku rebless不再适用于继承的类
该线程中给出的代码不再起作用:如何在Perl 6中重新控制对象? 我去年写过这段代码,然后就起作用了。现在没有: class Person { ; } class Woman is Person { ; } my $tom = Person.new; my $lisa = Woman.new; say $tom.^name; # -> Person say $lisa.^name; # -> Woman Metamodel::Primitives.rebless($tom, Woman); # -> New type Woman for Person is not a mixin type 该错误消息没有意义,因为它应该与继承的类一起使用。至少是。 该文档没有帮助;https://docs.raku.org/routine/rebless
9 raku 



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.