gpt4 book ai didi

operators - Raku 混淆后缀 ,= 操作符行为

转载 作者:行者123 更新时间:2023-12-03 18:29:21 26 4
gpt4 key购买 nike

raku documentation page运算符(operator)说 ,=应该连接

the contents of the variable on the left hand side and the expression on the right hand side



以类相关的方式。该文档还提供了一个带有 Hash 的示例。多变的:
my %a = :11a, :22b;
%a ,= :33x;
say %a # OUTPUT: «{a => 11, b => 22, x => 33}␤»

这对我有用,但是当我尝试对 Array 做同样的事情时发生了一些令人困惑的事情:
my @a = 1, 2;
@a ,= 3;
say @a

输出类似于 (\Array_94393785458840 = [Array_94393785458840 3]) .然而,我希望结果是 [1, 2, 3] .

我的问题是: 这是预期的行为吗?如果是这样,这种操作的目的是什么?

最佳答案

foo ,= bar

是简称
foo = foo, bar

所以,
@a ,= 3

简称:
@a = @a, 3;

在 2015 年的 Great List Refactor 中,单参数规则无处不在。由于表达式的右侧不是单个参数, @a在右手边,不会变平。

如此有效地,您正在创建一个自引用数组,其中第一个元素引用自身(这是 say 试图告诉您的)。

由于我不太清楚的原因,这同样不适用于扮演关联角色的对象。所以在这种情况下, %a确实变平了,从而添加了给定的 Pair到哈希。
my %a = :11a, :22b;
%a = %a, :33x;
say %a # OUTPUT: «{a => 11, b => 22, x => 33}␤»

回到你的问题:在数组的情况下,我认为 ,= 没有多大用处。手术。在 Great List 重构之前,它可能已经完成了您的预期。但它会与其他情况不一致,并且一致性被认为更重要(因为在 Great List Refactor 之前,什么时候会变平,什么时候不会变平,这是相当武断的,而且很多时候是 WAT 而不是 DWIM 的来源)。

关于operators - Raku 混淆后缀 ,= 操作符行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60042275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com