为什么+和〜以不同的方式影响Perl 6结点?

时间:2017-08-06 01:47:15

标签: perl6 raku perl6-junction

将一个添加到Ints的交汇处:

put any( 1, 3, 7 ) + 1;

现在你们将这些Ints的交汇点增加了一个:

any(2, 4, 8)

所以,2 == any(2, 4, 8)是真的。

建立字符串连接并附加到这些字符串:

put any( <h H> ) ~ 'amadryas';

你得到的结果不同于hamadryas&#39;或者&#39; Hamadryas&#39;:

any("h", "H")amadryas

我期待的是:

any( 'hamadryas', 'Hamadryas' );

这些操作的区别是什么,即使它们应该相似,也会给他们不同的行为?

2 个答案:

答案 0 :(得分:1)

在High Sierra 10.13上,失败了:

put any( 1, 3, 7 ) + 1

此类型无法取消装入本机字符串:P6opaque,Junction   在第1行的块中

perl6 -v

这是基于MoarVM版本2017.10构建的Rakudo Star版本2017.10 实现Perl 6.c.

答案 1 :(得分:0)

引用the filed bug report,这是Zoffix ++改进的:

  

感谢您的举报。 lizmat ++解决了这个问题。

put例程 not 不能显式处理Junction参数。因此,作为per design,最终结果是对其每个元素都调用put any( 1, 3, 7 ) + 1; # 2␤4␤8 put any( <h H> ) ~ 'amadryas'; # hamadryas␤Hamadryas

put

根据设计,put any( 1, 3, 7 ) + 1; # 4␤8␤2 put any( <h H> ) ~ 'amadryas'; # Hamadryas␤hamadryas 的调用顺序不确定。因此,相同代码的其他运行(可能与更高版本的编译器一起运行)可能会导致:

put

say相比,say例程特殊情况下的结点。因此,最终结果只是一个对say any( 1, 3, 7 ) + 1; # any(2, 4, 8) say any( <h H> ) ~ 'amadryas'; # any(hamadryas, Hamadryas) 的调用:

string TLDID = gvTLDs.SelectedRow.Cells[0].Text;