我想对集合进行散列。好吧,SetHashes,因为它们需要是可变的。
事实上,我想用同一个 SetHash 的多个相同副本来初始化我的 Hash。
我有一个包含新哈希键的数组: @keys
我已经在标量变量中初始化了我的 SetHash: $set
我正在寻找一种干净的方法来初始化哈希。
这有效:
my %hash = ({ $_ => $set.clone } for @keys);
Run Code Online (Sandbox Code Playgroud)
(括号是优先需要的;没有它们,赋值%hash是for循环体的一部分。我可以将其更改为非后缀 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) 我正在尝试编写如下的紧凑行,代码是脚本的摘录,该脚本使用动态范围的特殊变量$*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) 我正在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 …
(这是对: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)