Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hash perl6哈希键<$/[0]><&引用$/[0]”&燃气轮机;和{quot;$/[0]}使值的行为不同_Hash_Key_Quote_Raku - Fatal编程技术网

Hash perl6哈希键<$/[0]><&引用$/[0]”&燃气轮机;和{quot;$/[0]}使值的行为不同

Hash perl6哈希键<$/[0]><&引用$/[0]”&燃气轮机;和{quot;$/[0]}使值的行为不同,hash,key,quote,raku,Hash,Key,Quote,Raku,我有一个格式为type:amount的文件,我想把所有 将这些行放入一个散列,其键为类型,值为 金额的总和 然而,类型的引用方式似乎会影响 金额行为。有人能解释为什么会这样吗 以下是文件数据的内容: food : 100.01 gas : 50.02 food : 20.03 gas : 30.04 当使用%x构造键时,键似乎是 正确,但是这些值似乎被推送到了一个数组中,即使我 要添加以获取总金额: home/lisprog$ cat data | perl6 -ne '

我有一个格式为
type:amount
的文件,我想把所有 将这些行放入一个散列,其键为
类型
,值为
金额的总和

然而,
类型
的引用方式似乎会影响
金额
行为。有人能解释为什么会这样吗

以下是文件
数据
的内容:

food :  100.01
gas  :  50.02
food :  20.03
gas  :  30.04
当使用
%x
构造键时,键似乎是 正确,但是这些值似乎被推送到了一个数组中,即使我 要添加以获取总金额:

home/lisprog$  cat data | perl6 -ne '
    state %x //= {}; 
    if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
        if %x<$/[0]>:exists {
            %x<$/[0]> += ($/[1].Numeric); 
        } 
        else { 
            %x.push: "$/[0]"=>($/[1].Numeric); 
        } 
    }; 
    END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 100.01 20.03
gas : 50.02 30.04

那么,键是如何影响值的行为的呢?还是我问错问题了?

我想你对
的功能有误解。它们基本上等同于单引号:


事实上,仔细想想,它实际上闻起来像是一种混音。将此作为练习留给读者:-)

谢谢伊丽莎白·马蒂森!!我现在明白了。我的错误是认为它用插值进行双引号。通过哈希推送得到正确的密钥,我更难找到自己的误解。我会检查一下袋子,混音,布景等。谢谢!!!
cat data | perl6 -ne '
    state %x //= {}; 
    if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
        if %x<"$/[0]">:exists {
            %x<"$/[0]"> += ($/[1].Numeric); 
        } 
        else { 
            %x.push: "$/[0]"=>($/[1].Numeric); 
        } 
    }; 
    END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 100.01 20.03
gas : 50.02 30.04
home/lisprog$  cat data | perl6 -ne '
    state %x //= {}; 
    if $_ ~~ m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* / {
        if %x{"$/[0]"}:exists {
            %x{"$/[0]"} += ($/[1].Numeric); 
        } 
        else { 
            %x.push: "$/[0]"=>($/[1].Numeric); 
        } 
    }; 
    END { for %x.kv -> $m, $n { say "$m : $n"; } }' | sort
food : 120.04
gas : 80.06
say <"foo">    # "foo"
$ cat data | perl6 -ne '
state %x; 
%x{$0} += $1 if m/ \s* (\S+) \s* \: \s* (\d+\.\d+) \s* /;
END for %x.kv -> $m, $n { say "$m : $n" }' | sort