Questions tagged «raku»

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


2
我可以在Nil上调用任何方法,这感觉不对
最近,我花了很多时间调试脚本,当我最终发现问题时,是由于代码如下所示: class Foo { has $.bar; method () { # do stuff $!.bar; } } 原来问题在于$!.bar它应该是$!bar或$.bar。我明白了 但是为什么不死呢? 详细看这个,它看起来像这里的问题是,我试图调用(不存在)的方法bar上$!,它在这一点上Nil,因为再也没有出现过任何差错。 看起来我可以实际调用任何我想要的方法了Nil,它们都默默地返回Nil,包括Nil.this-is-a-fake-method和之类的东西Nil.reverse-entropy(123)。 这是功能吗?如果是这样,有什么根据?
14 raku 

1
构造嵌套数据结构时遇到困难
在尝试为API创建JSON消息时,我发现自己在努力做一些我认为很简单的事情。我需要创建如下消息: { "list": [ { "foo": 1, "bar": 2 } ] } 但是,我的第一次尝试无效: say to-json { foo => [ { a => 1, b => 2 } ] }; # {"foo":[{"a":1},{"b":2}]} 试图简化事情使我更加困惑: say { foo => [ { a => 1 } ] }; # {foo => [a => 1]} …

2
为什么在Perl6序列上没有“每种”方法?
有时我会在Perl 6 REPL上开始编写方法调用链,例如: ".".IO.dir.grep(...).map(...). ...然后我意识到我要对最终列表进行的操作是将每个元素打印在自己的行上。我希望序列具有某种类似于each方法的方法,因此我可以使用结束链.each(*.say),但是没有找到这样的方法。取而代之的是,我必须返回到该行的开头并前置.say for。感觉好像打乱了我的思想。 这是一个小麻烦,但是让我感到震惊,因为它是如此明显的遗漏,我想知道我是否缺少一些简单的选择。我唯一想到的是».sayand .join("\n").say,但是前者可以对元素进行无序操作(如果我理解正确的话),而后者可以构造一个字符串,该字符串可能会很大,具体取决于输入列表。
14 raku 

3
如何定义Raku语法来解析TSV文本?
我有一些TSV数据 ID Name Email 1 test test@email.com 321 stan stan@nowhere.net 我想将其解析为哈希列表 @entities[0]<Name> eq "test"; @entities[1]<Email> eq "stan@nowhere.net"; 我在使用换行元字符来分隔标题行和值行时遇到麻烦。我的语法定义: use v6; grammar Parser { token TOP { <headerRow><valueRow>+ } token headerRow { [\s*<header>]+\n } token header { \S+ } token valueRow { [\s*<value>]+\n? } token value { \S+ } } my …
13 csv  grammar  raku 

3
如何在Raku中实施
在Perl中,可以使用Moo实现子around,这些子将包装类中的其他方法。 around INSERT => sub { my $orig = shift; my $self = shift; print "Before the original sub\n"; my $rv = $orig->($self, @_); print "After the original sub\n"; }; 如何在Raku中实现此行为,最好使用a role?
13 oop  raku 

1
在Raku中表达双重求和序列
如何在Perl 6中表达双变量双求和序列? 有关双变量双求和序列的示例,请参见此 它必须按原样表示,即在数学上不将双重求和简化为单个求和。谢谢。
13 math  raku 


1
Perl 6的reduce函数和reduce metaoperator给出不同的结果
my @s=<1 2 3 2 3 4>; say reduce {$^a < $^b}, @s; say [<] @s; # -------- # True # False 我的问题有两个方面:首先,为什么归约元<运算符对运算符的处理方式不同?似乎归约metaop估计使用了一个变量,在从true到false的第一次更改中,保留了该更改,原因是: say [\<] @s; # ---------- # (True True True False False False) 其次,我也想在reduce函数中使用它,即在reduce函数的花括号内引入一些代码,以便它提供与reduce meta运算符相同的结果。我该怎么做?谢谢。
12 raku  reduction 

2
标量值在推送后是否受到影响……(Raku)
我很难理解在推送Scalar之后何时以及为什么推送的容器所持有的价值会受到影响。我将在两个风格化的示例中尝试更复杂地说明我遇到的问题。 *示例1 *在第一个示例中,标量作为a的一部分$i被推到数组@b上List。推送之后,使用$i++指令在for循环的后续迭代中显式更新标量所拥有的值。这些更新会影响数组中的值@b:在for循环的末尾,@b[0;0]等于3,不再等于2。 my @b; my $i=0; for 1..3 -> $x { $i++; say 'Loose var $i: ', $i.VAR.WHICH, " ", $i.VAR.WHERE; if $x == 2 { @b.push(($i,1)); say 'Pushed $i : ', @b[0;0].VAR.WHICH, " ", @b[0;0].VAR.WHERE; } } say "Post for-loop"; say "Array : ", @b; say 'Pushed $i …

1
正则表达式中的$ /和$¢有什么区别?
如标题所示,$/和之间有什么区别$¢?它们似乎总是具有相同的值: my $text = "Hello world"; $text ~~ /(\w+) { say $/.raku } (\w+)/; $text ~~ /(\w+) { say $¢.raku } (\w+)/; 两者都会导致Match对象具有相同的值。在一个之上使用一个之上的逻辑是什么?
11 regex  raku 

1
在Raku中的模块中像Prelude模块一样使用Haskell
我正在编写一个包含某些部分的图形包,并且有一些运算符和数据类型分散在整个进程中。但是我不希望用户每次都添加相应的模块,因为这很混乱,例如,我将在这样的不同路径中有一个Point类,一个Monoid角色和一个Style类 unit module Package::Data::Monoid; # $?FILE = lib/Package/Data/Monoid.pm6 role Monoid {...} unit module Package::Data::Point; # $?FILE = lib/Package/Data/Point.pm6 class Point {...} unit module Package::Data::Style; # $?FILE = lib/Package/Data/Style.pm6 class Style {...} 我希望有一个haskell类似的前奏,lib/Package/Prelude.pm6 可以写出这样的脚本 use Package::Prelude; # I can use Point right away, Style etc... 而不是做 use Package::Data::Style; use Package::Data::Point; use …
11 haskell  raku 

2
在Raku中可以替代Perl的<>吗?
在这里学习我周围的Raku(neéPerl 6),非常好。但是我非常想念&lt;&gt;Perl 5 的魔力,您可以在其中: my $x = &lt;&gt;; print $x; while(&lt;&gt;) { print join(':', split); } (将下一条输入行读入$x,循环其余部分;输入来自名为input的文件或标准输入(如果未提供文件))。“ Perl 5到6”教程/迁移指南/ ...仅讨论slurp将整个文件或open按名称命名的单个文件。我找不到“从顺序的命名文件中获取输入”的魔术。 我想要魔术!
11 migration  raku 

1
作为永久服务运行Raku Cro应用
我想在前端Web服务器后面运行perl6 / raku Cro应用程序作为服务。 cro runsegfaults和重新启动后,仅运行将无法处理重新启动。 以前,在perl5中我使用过FastCGI-但是Cro::HTTP::Server的Cro::HTTP::Server.new().start()习惯用法似乎与FastCGI :: Native的while $fcgi.accept() {}示例不兼容。 该service.p6所产生cro stub确实有一个SIGINT处理程序,但我不能确定这是否足以指向它的systemctl服务,也就是 [Service] ExecStart = /path/to/service.p6 人们目前如何托管Cro应用程序?
11 raku  cro 

2
使用赋值运算符时,“方法'ASSIGN-KEY'的调用者必须是对象实例”
带有键入键的哈希... use v6; class Foo {} my Hash[Foo, Foo] $MAP; my $f1 = Foo.new; my $f2 = Foo.new; $MAP{$f1} = $f2; 产生错误: 方法“ ASSIGN-KEY”的调用者必须是“ Hash [Foo,Foo]”类型的对象实例,而不是“ Hash [Foo,Foo]”类型的对象。您是否忘记了“ .new”? 我发现它具有误导性;真正的错误是什么,我该写些什么? 我已经尝试过对%哈希变量使用sigil,但这也不起作用。
10 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.