在Perl 6中,密钥长于一个符号的.trans

Eug*_*sky 5 perl6

trans是一个非常有用和强大的工具,但它对我来说仍然有点神秘.

例如,我仍然不理解文档中的这句话:

如果使用键和值列表,也可以替换子串.

如果键和值长于一个符号,算法是什么?

以下测试代码探讨了如何.trans使用"冲突"键.为什么第一对的工作方式会有所不同,具体取决于它是单独的还是伴随第二对?

my Pair @trans =
     ab => '12',
     bc => '34',
     ;
my $str = 'ab';
say "both trans: $str.trans(@trans)";    # 13
say "1st  trans: $str.trans(@trans[0])"; # 12
Run Code Online (Sandbox Code Playgroud)

使用哈希而不是对列表会产生不同的结果:

my %trans =
     ab => '12',
     bc => '34',
     ;
my $str = 'ab';
say "both trans: $str.trans(%trans)";    # 12
Run Code Online (Sandbox Code Playgroud)

(据我所知hash,成对可以按任何顺序进行,但在第一个例子中,list它是第一对,如果第二对存在则不完全使用)

rai*_*iph 4

(我不能 100% 确定以下内容,但我必须运行。)

.trans需要一对或多对参数一起描述所需的翻译。

键为单个字符串的单个对的翻译

P6 将该对的键字符串的第 N 个字符映射到该对的值字符串的第 N 个字符。

因此.trans: "ab" => "12"映射"a""1""b""2"

其键是字符串列表的单个对的翻译

P6 将配对的键列表的第 N 个字符串映射到配对的值列表的第 N 个字符串。

因此.trans: ("ab", "bc") => ("12", "13")映射"ab""12""bc""13"

配对列表的翻​​译

单个对的翻译以上述两种形式中的一种或另一种进行,具体取决于密钥是否包含一个字符串或它们的列表。

对列表的翻​​译只是对每对重复该过程,根据该对的键执行第 N 个字符或第 N 个字符串映射。

如何.trans处理“冲突”键

给定一个对列表,P6 首先尝试第一对,如果不匹配,则尝试第二对,依此类推。


我需要探索利兹马特现在的想法以及她在之前的回答中所说的以下内容.trans时的含义:

我认为你误解了什么.trans。您指定要更改为其他字符的字符范围。您没有指定要更改为另一个字符串的字符串。


我认为您从文档中引用的句子有点含糊:

如果使用键和值列表,也可以替换子字符串。

这意味着传递给的对的(单个)属性存储字符串列表而不是单个字符串,对于该对的单个属性也是如此。.key.trans.value