问题描述
关于 hash
作为 trans
参数的另一个问题.在下面的代码中,简单地取 hash
给出了不正确的结果,但是用 keys
和 values
替换它使它正确.怎么了?
Yet another question about hash
as argument for trans
. In the following code taking simply hash
gives an incorrect result, but replacing it with keys
and values
makes it correct. What is wrong?
my @alph1 = <a+ b+ c+ d+ e+ f+>;
my @alph2 = <A_ B_ C_ D_ E_ F_>;
my %h;
%h{ @alph1 } = @alph2;
my $str = 'a+bc de+f';
my $text = $str.trans(%h);
say $text; # A_BC DE_F (incorrect)
$text = $str.trans(%h.keys => %h.values);
say $text; # A_bc dE_f (correct)
推荐答案
我想你误解了 .trans
的作用.您指定要更改为其他 字符 的 字符 范围.您没有指定要更改为另一个 string 的 string.
I think you misunderstand what .trans
does. You specify a range of characters to be changed into other characters. You are NOT specifying a string to be changed to another string.
所以答案A_BC DE_F
是正确答案,因为a
被A
代替,+
替换为 _
,b
替换为 B
,c
替换为替换为C
等
So the answer A_BC DE_F
is the correct answer, because a
is replaced by A
, the +
is replaced by _
, the b
is replaced by B
, the c
is replaced by C
, etc. etc.
也许我们应该引入一个 .subst
版本,它采用匹配器和替换的 Hash
.同时,您可能需要创建一个循环来运行散列的键/值,并使用它调用 .subst
.(https://docs.raku.org/routine/subst)
Perhaps we should introduce a version of .subst
that takes a Hash
of matchers and replacements. Meanwhile, you will probably have to create a loop that runs over the keys/values of the hash and call .subst
with that. (https://docs.raku.org/routine/subst)
这篇关于Perl 6: trans(%h) vs trans(%h.keys => %h.values)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!