标签: perl6

Rakudo测试套件进展?

曾经有一个图表跟踪Perl6对Perl6测试套件的实现.我有兴趣观察它的进展(并且,退步).该图表发生了什么,它曾经在www.rakudo.de网站上托管

有没有其他简单的方法,局外人可以了解Rakudo在完善规范方面的立场?还缺少什么功能?

rakudo perl6 raku

4
推荐指数
2
解决办法
190
查看次数

在Perl 6中调用类中的私有方法

我不能在Perl 6中的类中调用私有方法:

class MyClass {

  method !my-private-method($var1) {
    # ....
  }

  method my-method() {
    my $my-var1 = !my-private-method(123); # not found (Undeclared routines)
    my $my-var1 = $!my-private-method(123); # not found (Undeclared routines)
    my $my-var1 = $.my-private-method(123); # not found (Undeclared routines)
    my $my-var1 = my-private-method(123); # not found (Undeclared routines)
Run Code Online (Sandbox Code Playgroud)

那我怎么打电话my-private-methodmy-method

perl perl6

4
推荐指数
1
解决办法
173
查看次数

什么类型的Perl 6中的任何类型的列表?

考虑以下Python代码(作为示例):

a = 5 
b = "a"
l = [a, b] # -> typing.List[typing.Any]
print(l)   
# [5, "a"]
Run Code Online (Sandbox Code Playgroud)

列表的类型llist; 它不受它所拥有的类型的约束,因为Python是非常动态的类型.

将此与Go相比较,Go是强结构类型的:

var list []uint8{1, 2, 3, 4, 5, 6}
Run Code Online (Sandbox Code Playgroud)

该列表只能保存最多255个无符号整数.它不能保存任何其他类型.

也去:

var multi interface{"string", []int{9, 5}, rune('5'), []interface{}}
Run Code Online (Sandbox Code Playgroud)

接口允许不同类型的容器.


考虑Perl 6的,这更加动态地在类型比Python say 6 + "1";会给7的整数.(谁认为这是一个我不知道的好主意.)

我喜欢逐渐输入我的程序(特别是对于我正在学习的Perl 6),它提高了可读性和可维护性.

以下工作都不是:

use strict;
my Int $n = 6;
my Str $x = "a";
my Int @l = $n, $x;
Run Code Online (Sandbox Code Playgroud)

也不

use strict;    
my Int $n = …
Run Code Online (Sandbox Code Playgroud)

list perl6

4
推荐指数
2
解决办法
207
查看次数

Perl 6有污点模式吗?

Perl 5使用-T开关支持污染模式.该脚本将在内部将从脚本外部源检索到的任何值标记为受污染的值,该值应该不受污染.Perl 6是否支持这样的选择?

perl perl6 taint

4
推荐指数
2
解决办法
183
查看次数

perl6如何获得承诺的具体身份?

我正在尝试编写在promises中运行的3个echo服务器,但我想知道哪个承诺正在进行回显.有没有办法做到这一点?

no strict;

for 0 .. 2 -> $index {
    @result[$index] = start {
        $myID = $index; 
        say "======> $myID\n";

        my $rsSocket = IO::Socket::INET.new:
            localhost => 'localhost',
            localport => 1234 + $index,
            listen    => 1;

        while $rsSocket.accept -> $rsConnection {
            say "Promise $myID accepted connection";
            while $rsConnection.recv -> $stuff {
                say "promise $myID Echoing $stuff";
                $rsConnection.print($stuff);
            }
            $rsConnection.close;
        }
    }
}

await @result;
Run Code Online (Sandbox Code Playgroud)

echo服务器运行正常; 用"nc"测试;

在创建承诺之后,问题$myID2出现了,并且我无法告诉哪个承诺正在进行当前的回显.它似乎$myID被所有的承诺所使用; 有没有办法创建特定于个人承诺的变量?

identity perl6 promise

4
推荐指数
1
解决办法
92
查看次数

Perl 6中嵌套和非嵌套映射的上下文有什么区别?

我有这段代码.第一个非嵌套map输出一些东西,嵌套一个没有.我想我理解为什么第二个不起作用.这是一个懒惰的序列,Perl 6正在收集结果.没关系.但是不是第一个(非嵌套)map以同样的方式懒惰吗?如果我不对地图的结果做任何事情,它如何输出任何内容?也就是说,第一个人怎么懒?是否会自动获取接收器上下文,我必须明确sink地为嵌套的上下文提供(或某些东西)?不知怎的,我认为Perl 6应该能够为我解决这个问题.

my @array = (1, 2), (3, 4), ('a', 'b');

say "---On its own:";
my @item = 1, 2, 3;
@item.map: {
    say $_;
    };

say "---Inside another map:";
@array.map: {
    my @item = 1, 2, 3;
    @item.map: {
        say $_;
        }
    };
Run Code Online (Sandbox Code Playgroud)

这是输出:

---On its own:
1
2
3
---Inside another map:
Run Code Online (Sandbox Code Playgroud)

这与问题如何在Perl 6中的"for"循环中使用"map"这个问题有关.那个人说要做什么,但我问的更多是为什么问题.

在这方面,该解决方案是添加eager,sink或分配给内部map:

say "---eager:";
@array.map: { …
Run Code Online (Sandbox Code Playgroud)

lazy-evaluation perl6

4
推荐指数
2
解决办法
215
查看次数

如何在创建后更改Perl6中数组的大小?

在perl6中我可以创建一个固定大小的数组,如下所示:my @array [5];

然后我怎样才能将数组的大小更改为更大,例如我希望数组现在大小为7

谢谢

arrays rakudo perl6

4
推荐指数
1
解决办法
182
查看次数

Perl6:将Match对象转换为JSON可序列化Hash

我现在开始在一些Perl6上弄脏手.具体来说,我正在尝试编写基于语法的Fortran解析器(Fortran :: Grammar模块)

出于测试目的,我希望有可能将Match对象转换为JSON可序列化Hash.

谷歌搜索/ 官方Perl6文档没有帮助.如果我忽视某些事情,我道歉.

到目前为止我的尝试:

  • 我知道可以将a转换Match $mHashvia $m.hash.但这会保留嵌套Match对象.
  • 由于这只是要通过递归解决的,我试过,但有利于给先询问一种更简单的/现有解决方案是否存在等在这里了
  • 处理Match对象的内容显然最好通过make/ 来完成made.我希望有一个超级简单的Actions对象,用于所有匹配.parse默认方法,基本上只是做一个make $/.hash或类似的东西.我根本不知道如何指定默认方法.

testing json perl6 regexp-grammars

4
推荐指数
1
解决办法
217
查看次数

在Perl 6中使用具有对象键的哈希

我正在尝试Hash使用非字符串键,在我的情况下使用数组或列表.

> my %sum := :{(1, 3, 5) => 9, (2, 4, 6) => 12}
{(1 3 5) => 9, (2 4 6) => 12}
Run Code Online (Sandbox Code Playgroud)

现在,我不明白以下几点.

如何检索现有元素?

> %sum{(1, 3, 5)}
((Any) (Any) (Any))

> %sum{1, 3, 5}
((Any) (Any) (Any))
Run Code Online (Sandbox Code Playgroud)

如何添加新元素?

> %sum{2, 4} = 6
(6 (Any))
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
2
解决办法
372
查看次数

在sink上下文中无用的使用LOOP_BLOCK_1符号

用一个代码片段

perl6 -e 'loop { FIRST say "foo"; last }'
Run Code Online (Sandbox Code Playgroud)

我明白了

WARNINGS for -e:
Useless use of LOOP_BLOCK_1 symbol in sink context (line 1)
foo
Run Code Online (Sandbox Code Playgroud)

我知道如何解决警告.我想知道警告的来源是什么.我发现这张门票,但似乎没有得到任何关注.

这个警告是关于什么的?

那怎么回事呢?

$ perl6 --version
This is Rakudo version 2018.06 built on MoarVM version 2018.06
implementing Perl 6.c.
Run Code Online (Sandbox Code Playgroud)

perl6

4
推荐指数
1
解决办法
130
查看次数