小编Mik*_*kel的帖子

perl6中的变量量词

假设我想匹配至少4个字母的单词,(并将它们存储在一个数组中),我写了以下正则表达式,它工作正常:

if ( $text ~~ m:g/(\w ** 4..*)/ )
{
  my @words = $/;
  ... 
}
Run Code Online (Sandbox Code Playgroud)

量词从4到无限

**4..*
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试用标量$ min_length替换4.都:

if ($text ~~ m:g/(\w ** $::min_length..*)/)
Run Code Online (Sandbox Code Playgroud)

和:

if ($text ~~ m:g/(\w ** <$::min_length>..*)/)
Run Code Online (Sandbox Code Playgroud)

在编译时导致错误:量词没有量化

有标量作为量词的方法吗?

regex perl6

7
推荐指数
2
解决办法
228
查看次数

perl6有一个等同于MAIN子类的类方法吗?

或者类似于java的main()方法?换句话说,首先执行的方法,可以从终端读取一个或多个参数.

perl6

7
推荐指数
1
解决办法
148
查看次数

Perl6:子条款中的构造函数

有没有办法从子类中的构造函数分配超类中声明的实例变量?我已经习惯使用BUILD()作为构造函数,但我想知道这是不是一个好主意.即:

use v6;      

class File                                                                                                                                                                                                                                    
{                                                                                                                                                                                                                                             
    has $!filename;                                                                                                                                                                                             
}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       

class XmlFile is File                                                                                                                                                                                                                         
{                                                                                                                                                                                                                                             
    submethod BUILD(:$!filename)                                                                                                                                                                                                              
    {
    }
}

my XmlFile $XF = XmlFile.new(filename => "test.xml");
Run Code Online (Sandbox Code Playgroud)

上面的代码不起作用,提示错误:"属性$!filename未在类XmlFile中声明".这是使用正确的访问者的问题吗?改变"!" 至 "." 没有解决问题.

constructor perl6

5
推荐指数
1
解决办法
134
查看次数

<.ident> perl6语法中的函数/捕获

在阅读perl6的Xml语法时(https://github.com/supernovus/exemel/blob/master/lib/XML/Grammar.pm6),我在理解以下令牌时遇到了一些困难.

token pident {
  <!before \d> [ \d+ <.ident>* || <.ident>+ ]+ % '-'
}
Run Code Online (Sandbox Code Playgroud)

更具体地说<.ident>,没有其他身份定义,所以我假设它是一个保留的术语.虽然我无法在perl6.org上找到合适的定义.有谁知道这意味着什么?

regex grammar perl6

5
推荐指数
2
解决办法
161
查看次数

在Perl6中创建一个部分数组

有没有一种很好的方法来获得从另一个数组派生的部分数组?

示例:给定一个具有x个元素的数组,并且Int $index在该Array的元素范围内,我想从一个$index + 1元素的数量运行一个函数- 1.

基本上我想比较数组中的所有元素.比较是元素本身的功能.(注意我知道这个功能eqv,虽然这不适合这种特殊情况)

我在考虑以下内容:

for $!my-array.kv -> $index, $element
{
    for $!my-array[$index+1 .. .elems-1] -> $another-element
    {
        $element.compare($another-element)
    }
}
Run Code Online (Sandbox Code Playgroud)

arrays perl6 raku

5
推荐指数
1
解决办法
128
查看次数

Perl6制作一个可观察的计时器

我试图使用计时器类编写一个观察者模式,该计时器类以给定的间隔调用其订户.一直试图理解Perl6中的承诺概念.

class Timer does Observable
{
    has Promise $!p;
    has Int $!interval;
    has Bool $!active = False;

    submethod BUILD(Int :$!interval) {}

    method start {
        $!p = Promise.start( {
            $!active = True;
            loop {
                sleep($!interval);
                @!action_listeners>>.actionPerformed(ActionEvent.new);
                if !$!active {$!p.keep}
            }
        });
    }

    method stop {
        $!active = False;
    }
}
Run Code Online (Sandbox Code Playgroud)

Observer角色只是一个包含订阅者的数组.当然,我应该制作一个方法来更新角色中的所有订阅者.

role Observable {
    has ActionListener @!action_listeners;

    method addActionListener(ActionListener $al){
        @!action_listeners.push($al);
    }

    method removeActionListener{
        @!action_listeners.pop;
    }
}
Run Code Online (Sandbox Code Playgroud)

ActionListener角色只有一个actionPerformed方法.ActionEvent类可能不是nessesary,它现在只是一个空类.

role ActionListener
{
    method actionPerformed(ActionEvent $e) { ... }
}
Run Code Online (Sandbox Code Playgroud)

从脚本运行:

my Subscriber …
Run Code Online (Sandbox Code Playgroud)

concurrency perl6 observer-pattern

5
推荐指数
2
解决办法
162
查看次数