提问者:小点点

. trans在Perl 6中的密钥长度超过一个符号


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

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

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

(我知道在hash中,配对可以按任何顺序进行,但在列表的第一个示例中,它是第一个配对,如果存在第二个配对,则不会完全使用)


共1个答案

匿名用户

(我不是100%确定以下内容,但我必须跑。)

. trans需要一个或多个配对参数来共同描述所需的翻译。

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

因此. trans:"ab"=

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

因此. trans:("ab","bc")=

根据键是否包含一个字符串或它们的列表,单个对的翻译以上述两种形式中的一种或另一种进行。

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

. trans如何使用“冲突”键

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

我需要探索lizmat现在的想法,以及她在之前关于. trans的回答中说以下内容时的意思:

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

我觉得你从文档中引用的句子有点模棱两可:

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

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