是否有一种直接的方法来使用Promise.in(或其他子/方法/类)来获得不确定的时间?换句话说,承诺永远不会解决。
目前,我正在检查$time何时遵守诺言,以查看是否请求了不确定的时间(以负数或0值表示),并防止react块退出。
这不是一个糟糕的解决方案,但是有没有更多惯用的方式来实现这一目标?
my $time=0;
react {
whenever Promise.in($time) {
#check if time is 0
done if $time > 0;
}
whenever signal(SIGINT) {
done;
}
#whenever Supply...{
#}
}
Run Code Online (Sandbox Code Playgroud) 该问题已移至“代码审查”中的该职位。请在代码审查中回答问题。谢谢!
受此颜色渐变生成器的启发,这是perl6中的渐变生成器。我想知道代码是否可以简化或改进。它将十六进制颜色转换为base10,计算渐变颜色,然后将颜色转换为base16。
my $initial_color = '#FF0000';
my $final_color = '#00FF00';
my $gradient = 10;
my @initial = ($initial_color ~~ /\#(..)(..)(..)/).list.map: { .Str.parse-base(16) };
my @final = ($final_color ~~ /\#(..)(..)(..)/).list.map: { .Str.parse-base(16) };
my @range = @final Z- @initial;
my @increment = @range.map: { $_ / $gradient };
my @color;
@color.push: @initial;
for (1..$gradient) -> $i {
@color.push: @(@color[$i-1]) Z+ @increment;
}
for (0..$gradient) -> $i {
@color[$i] = '#' ~ ( @(@color[$i]).map: { .base(16,0).fmt('%02s') } ).join; …Run Code Online (Sandbox Code Playgroud) 我怎么知道使用时我是否真的需要返回l值FALLBACK?
我正在使用,return-rw但我只想return在可能的地方使用。我想跟踪我是否实际上已修改过%!attrs或仅在FALLBACK调用时读取了该值。
或者(替代方案B)我可以附加回调或类似的东西%!attrs来监视更改吗?
class Foo {
has %.attrs;
submethod BUILD { %!attrs{'bar'} = 'bar' }
# multi method FALLBACK(Str:D $name, *@rest) {
# say 'read-only';
# return %!attrs{$name} if %!attrs«$name»:exists;
# }
multi method FALLBACK(Str:D $name, *@rest) {
say 'read-write';
return-rw %!attrs{$name} if %!attrs«$name»:exists;
}
}
my $foo = Foo.new;
say $foo.bar;
$foo.bar = 'baz';
say $foo.bar;
Run Code Online (Sandbox Code Playgroud) 如何为哈希创建代理对象?我似乎找不到传递哈希键的方法:
#sub attr() is rw {
sub attr($name) is rw {
my %hash;
Proxy.new(
FETCH => method (Str $name) { %hash«$name» },
STORE => method (Str $name, $value) { %hash«$name» = $value }
);
}
my $attr := attr();
$attr.bar = 'baz';
say $attr.bar;
Run Code Online (Sandbox Code Playgroud) 我正在寻找一些有关如何在Raku / perl6中按第n个文件读取文本文件的建议。
在生物信息学研究中,有时我们需要以一种不太直接的方式来解析文本文件。例如Fastq文件,一次以4行为一组存储数据。甚至更多,这些Fastq文件成对出现。因此,如果我们需要解析此类文件,则可能需要执行以下操作:从第一个Fastq文件读取4行,从第二个Fastq文件读取4行,然后从第一个Fastq文件读取接下来的4行,然后读取第二个fastq文件中的下4行,......
关于解决此问题的最佳方法,我是否可以提出一些建议?Raku的“ IO.lines”方法似乎能够一次处理每一行。但不确定如何处理每第n行
一个示例fastq文件对:https : //github.com/wtwt5237/perl6-for-bioinformatics/tree/master/Come%20on%2C%20sister/fastq 我们之前对“ IO.lines”进行的尝试:https:// github.com/wtwt5237/perl6-for-bioinformatics/blob/master/Come%20on%2C%20sister/script/benchmark2.p6
我因此从字符串中捕获一个数字:
my $n1;
if $string1 ~~ /(<[0..4]>)$/ {
$n1 = $0;
} else {
put "$string1 failed regex.";
die;
}
Run Code Online (Sandbox Code Playgroud)
这是很多行,但是我可以在一行中复制和编辑字符串,因此:
my $string2 = $group2.subst(/<[0..4]>$/, '');
Run Code Online (Sandbox Code Playgroud)
我仍在学习raku / perl6,我浏览了https://docs.perl6.org/type/Str,看起来Raku不能做到这一点……但我不确定。
有没有一种方法可以像上面的第一个代码示例一样在一行中捕获子字符串?
我在脚本中反复执行此过程,这确实会缩短脚本
我正在尝试将针对背包问题的基于正则表达式的解决方案从Perl转换为raku。Perlmonks的详细资料
Perl解决方案创建此正则表达式:
(?<P>(?:vvvvvvvvvv)?)
(?<B>(?:vv)?)
(?<Y>(?:vvvv)?)
(?<G>(?:vv)?)
(?<R>(?:v)?)
0
(?=
(?(?{ $1 })wwww|)
(?(?{ $2 })w|)
(?(?{ $3 })wwwwwwwwwwww|)
(?(?{ $4 })ww|)
(?(?{ $5 })w|)
)
Run Code Online (Sandbox Code Playgroud)
与匹配vvvvvvvvvvvvvvvvvvv0wwwwwwwwwwwwwww。之后,匹配哈希%+包含要放入麻袋中的物品。
我的raku转换是:
$<B> = [ [ vv ]? ]
$<P> = [ [ vvvvvvvvvv ]? ]
$<R> = [ [ v ]? ]
$<Y> = [ [ vvvv ]? ]
$<G> = [ [ vv ]? ]
0
<?before
[ { say "B"; say $/<B>; say $0; say …Run Code Online (Sandbox Code Playgroud) 这是对Baggy add (+) work on MixHash weights的(有点迟到的)跟进吗?. MixHash 是一个很好的单位比较工具 - 因为我知道我的 dmix => ("m"=>2,"kg"=>1,"s"=>-2).MixHash 对于 'kg m2 per s2' 和 'kg.m^2/s^2' 等等。
这是我寻求的三重清晰度:
让我知道我是否可以提供代码或应该提交错误报告...
Raku 是渐进式打字语言。所以下面的代码:
my %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)
是相同的:
my Hash %hash = abc => 4.5, abd => 5.5, bcd => 6.4, bce => 3.6;
Run Code Online (Sandbox Code Playgroud)
但是,它报告一个错误:
Type check failed in assignment to %hash; expected Hash but got Rat (4.5)
Run Code Online (Sandbox Code Playgroud)
为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?
Raku 中是否应执行以下操作:
my role R[::T] {
has T $!a;
method m ( T $v ) {
$!a = $v;
}
method n ( --> T ) {
$!a;
}
}
my class C does R[Str] { }
my C $c = C.new;
$c.m: 'hello';
$c.n;
Run Code Online (Sandbox Code Playgroud)
运行上面的命令会出现错误:
返回值类型检查失败;期望 T 但得到 Str (“你好”)
我是否误解了参数化角色的工作原理?