相关疑难解决方法(0)

如何将超算子与不是真正标量的标量一起使用?

我想对集合进行散列。好吧,SetHashes,因为它们需要是可变的。

事实上,我想用同一个 SetHash 的多个相同副本来初始化我的 Hash。

我有一个包含新哈希键的数组: @keys

我已经在标量变量中初始化了我的 SetHash: $set

我正在寻找一种干净的方法来初始化哈希。

这有效:

my %hash = ({ $_ => $set.clone } for @keys);
Run Code Online (Sandbox Code Playgroud)

(括号是优先需要的;没有它们,赋值%hashfor循环体的一部分。我可以将其更改为非后缀 for 循环或进行其他几个小更改中的任何一个,以稍微获得相同的结果不同的方式,但这不是我在这里感兴趣的。)

相反,我有点希望我可以使用 Raku 的一个漂亮的超级操作员,也许是这样的:

my %hash = @keys »=>» $set;
Run Code Online (Sandbox Code Playgroud)

$set一个简单的字符串或数字,但一个 SetHash?

Array >>=>>> SetHash can never work reliably: order of keys in SetHash is indeterminate
Run Code Online (Sandbox Code Playgroud)

很高兴知道,但我不希望它以任何顺序超过 RHS 。这就是我使用 hyperop 的右指向版本的原因:所以它会根据需要复制 RHS 以将其与 LHS 匹配。在这种表达中,有什么办法可以说“哟,乐,把它当作一个标量。不,真的。”?

我尝试了一个显式 Scalar 包装器(这会使值更难获得,但这是一个实验):

my %map = @keys »=>» $($set,)
Run Code Online (Sandbox Code Playgroud)

这让我收到了这条消息:

Lists on either …
Run Code Online (Sandbox Code Playgroud)

rakudo raku

9
推荐指数
1
解决办法
116
查看次数

"连续两个术语"错误

我正在尝试编写如下的紧凑行,代码是脚本的摘录,该脚本使用动态范围的特殊变量$*IN读取STDIN.你能告诉我如何正确写这条线吗?

这有效

for $*IN.lines() {
    last when "" ;
    say "VERBOSE \"$_ is the string\"";
    $i=$i+1;
}
Run Code Online (Sandbox Code Playgroud)

不起作用

.say "VERBOSE \"$_ is the string\"" for $*IN.lines() last when "";
Run Code Online (Sandbox Code Playgroud)

错误输出:

===SORRY!=== Error while compiling /usr/share/asterisk/agi-bin/agi-t1.p6
Two terms in a row
at /usr/share/asterisk/agi-bin/agi-t1.p6:5
------> .say? "Verbose \"$_\"" for $*IN.lines() last
expecting any of:
  infix
  infix stopper
  statement end
  statement modifier
  statement modifier loop
Run Code Online (Sandbox Code Playgroud)

compiler-errors syntax-error perl6

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

在Perl6中更改Data :: Printer中的参数

我正在Perl6中打印数据,Data::Printer这是一个很棒的程序包,但是我试图更改参数,但我不能。

例如,我想要:

HG00112 {
    gained_site                    {
        9:10162   0,
        9:10272   var{HG00112}{gained_site}{9:10162},
        9:10326   var{HG00112}{gained_site}{9:10162},
        ...
}(tied to Perl6::Hash)
Run Code Online (Sandbox Code Playgroud)

看起来像

HG00112 {
    gained_site                    {
        9:10162   0,
        9:10272   0,
        9:10326   0,
        ...
}(tied to Perl6::Hash)
Run Code Online (Sandbox Code Playgroud)

易于阅读(我不在乎tied to Perl6::Hash

可以使用JSON看到此哈希元素:

"HG00112": {
    "discordant_multiallelic_loss": 0,
    "concordant_hom_alt": 4,
    "discordant_het_to_alt": 0,
    "discordant_hom_alt_to_ref": 0,
    "discordant_hom_ref_to_alt": 0,
    "lost_site": 0,
    "concordant_het": 3,
    "discordant_multiallelic_gain": 0,
    "discordant_hom_alt_to_het": 0,
    "discordant_call_to_no_call": 0,
    "discordant_het_to_ref": 0,
    "concordant_hom_ref": 5,
    "concordant_site": 18,
    "discordant_no_call_to_call": 0,
    "concordant_no_call": 6,
    "concordant_multiallelic": 0,
    "gained_site": 0,
    "discordant_hom_ref_to_het": 0
}
Run Code Online (Sandbox Code Playgroud)

我通常使用加载软件包use …

printing perl6

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

Raku rebless 和多个类

(这是对:Raku rebless 不再使用继承类的后续操作

我试图想出一个更复杂的用例,但我无法让代码工作。

这个想法是一个 Person 类,具有用于 Child 和 Adult 的 mixin 子类。我们有一个 Child 对象,并在年龄超过 18 岁时将类型更改为 Adult。

这个显然失败了,因为 Adult 是 Parent 上的 mixin,而不是 Child 上的:

class Person
{
  has Int $.age is rw = 0;

  method happy-birthday
  {
    $.age++;
    # Metamodel::Primitives.rebless($, Adult) if $.age == 18;
  }

  method can-vote
  {
    ...;
  }
}

constant Adult = Person but role { method can-vote { True  } }

constant Child = Person but role
{
  method can-vote …
Run Code Online (Sandbox Code Playgroud)

raku

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

标签 统计

perl6 ×2

raku ×2

compiler-errors ×1

printing ×1

rakudo ×1

syntax-error ×1