小编Eli*_*sen的帖子

可以无限期使用Promise.in吗?

是否有一种直接的方法来使用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 promise raku

6
推荐指数
2
解决办法
103
查看次数

perl6:html颜色渐变生成器

该问题已移至“代码审查”中的该职位。请在代码审查中回答问题。谢谢!


受此颜色渐变生成器的启发,这是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)

html gradient colors perl6 raku

6
推荐指数
0
解决办法
132
查看次数

如何知道使用`FALLBACK`时是否返回左值?

我怎么知道使用时我是否真的需要返回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)

metaprogramming lvalue perl6 raku

6
推荐指数
1
解决办法
98
查看次数

哈希的代理对象?

如何为哈希创建代理对象?我似乎找不到传递哈希键的方法:

#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)

hash proxy object perl6 raku

6
推荐指数
1
解决办法
87
查看次数

在Raku中每n行读取文本文件时需要建议

我正在寻找一些有关如何在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

raku

6
推荐指数
2
解决办法
136
查看次数

Raku:一个线表达式可以从字符串中捕获组?

我因此从字符串中捕获一个数字:

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不能做到这一点……但我不确定。

有没有一种方法可以像上面的第一个代码示例一样在一行中捕获子字符串?

我在脚本中反复执行此过程,这确实会缩短脚本

string raku

6
推荐指数
2
解决办法
72
查看次数

Perl regex与Raku regex,引擎的差异?

我正在尝试将针对背包问题的基于正则表达式的解决方案从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)

regex raku

6
推荐指数
1
解决办法
78
查看次数

MixHash 很有用 - 但需要一些说明

这是对Baggy add (+) work on MixHash weights的(有点迟到的)跟进吗?. MixHash 是一个很好的单位比较工具 - 因为我知道我的 dmix => ("m"=>2,"kg"=>1,"s"=>-2).MixHash 对于 'kg m2 per s2' 和 'kg.m^2/s^2' 等等。

这是我寻求的三重清晰度:

  1. 我仍然需要将 MixHash (+) MixHash 的结果强制转换为 MixHash(默认结果是不可变的 Mix) - 一个或多个 MixHashen 的操作结果是否仍然意图成为 MixHash?
  2. 结果如果 MixHash (+) Any 潜入一个顽皮的不需要的元素 dmix => ("m"=>2,"kg"=>1,"s"=>-2,"MixHash"=>1) - 这是一个错误,对。[我已经通过将通货紧缩默认设置为空集来修补...... MixHash $.dmix is rw = ?.MixHash;]
  3. 文档https://docs.raku.org/language/setbagmix将 (+) 显示为 Baggy 添加,但 (-) 显示为 Set Difference。当我做 MixHash (-) MixHash 我似乎得到了宽松的减法 - 这就是我想要的。希望这是文档中的疏忽?

让我知道我是否可以提供代码或应该提交错误报告...

units-of-measurement raku

6
推荐指数
1
解决办法
63
查看次数

为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?

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)

为什么在使用粗箭头语法构建的哈希变量之前添加类型会导致类型检查失败错误?

hash raku

6
推荐指数
1
解决办法
90
查看次数

将返回类型限制为角色参数捕获的类型

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 (“你好”)

我是否误解了参数化角色的工作原理?

roles parameterized-types raku

6
推荐指数
1
解决办法
101
查看次数