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

时间:2017-11-08 07:38:30

标签: perl6

trans是一个非常有用和强大的工具,但对我来说仍然是a bit of a mystery

E.g。我仍然不明白文档中的这句话:

  

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

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

以下测试代码探讨<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <link href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" rel="stylesheet" /> <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> <p>Date: <input type="text" class="date"></p>如何使用'冲突'键。为什么第一对的工作方式会有所不同,具体取决于它是单独使用还是伴随第二对?

.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

(据我所知,在my %trans = ab => '12', bc => '34', ; my $str = 'ab'; say "both trans: $str.trans(%trans)"; # 12 中,对可以按任意顺序排列,但在第一个示例中hash,它是 1st 对,这是不完全的如果第二对存在则使用)

1 个答案:

答案 0 :(得分: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首先尝试第一个,如果不匹配,则第二对,依此类推。

我需要探讨lizmat现在的想法以及当她在her earlier answer about .trans中说出以下内容时她的意思:

  

我认为你误解了.trans的作用。您可以指定要更改为其他字符的字符范围。您没有指定要更改为其他字符串的字符串。

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

  

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

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