假设我想匹配至少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)
在编译时导致错误:量词没有量化
有标量作为量词的方法吗?
有没有办法从子类中的构造函数分配超类中声明的实例变量?我已经习惯使用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中声明".这是使用正确的访问者的问题吗?改变"!" 至 "." 没有解决问题.
在阅读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上找到合适的定义.有谁知道这意味着什么?
有没有一种很好的方法来获得从另一个数组派生的部分数组?
示例:给定一个具有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) 我试图使用计时器类编写一个观察者模式,该计时器类以给定的间隔调用其订户.一直试图理解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)