gpt4 book ai didi

多变量初始化中使用的绑定(bind)运算符仅在变量也在同一行中声明时才有效

转载 作者:行者123 更新时间:2023-12-03 20:24:43 24 4
gpt4 key购买 nike

在以下示例中:

my $i1 = 1;
my $i2 = 2;

my ($v1, $v2);

($v1, $v2) := ($i1, $i2);

say $v1;
say $v2;
代码抛出编译错误:
===SORRY!=== Error while compiling ...
Cannot use bind operator with this left-hand side
at ...:8
------> ($v1, $v2) := ($i1, $i2)<HERE>;
当我将声明和绑定(bind)放在一行中时,它会成功运行:
my $i1 = 1;
my $i2 = 2;

my ($v1, $v2) := ($i1, $i2);

say $v1; # 1
say $v2; # 2

$i1 = 11;
$i2 = 22;

say $v1; # 1
say $v2; # 2
尽管如此,最后一个成功的例子表明变量 $v1, $v2 没有绑定(bind)到变量 $i1, $i2,而是分配了它们各自的值。
似乎没有实际的绑定(bind),而是一个简单的分配!
是否有人对这种行为背后的机制有解释,为什么我们还必须在同一行中“声明”变量,以便代码运行?

最佳答案

在第一种情况下,它只是说您不能在创建后绑定(bind)该列表。
当您将一个列表绑定(bind)到另一个列表时,您并没有绑定(bind)每个变量,而是绑定(bind)了它的容器; :=将其左侧绑定(bind)到右侧,使它们实际上是同一件事;如果它们一开始就不是同一件事,那么以后就不能这样做了。
因此,如果你想将一个容器绑定(bind)到另一个容器,你必须有效地声明并将它本身绑定(bind)到你想要绑定(bind)的任何内容。
这也适用于第二种情况。它使列表($v1, $v2)和右手边一样。这可能会引发错误,但它根本不会绑定(bind)每个单独的容器。

关于多变量初始化中使用的绑定(bind)运算符仅在变量也在同一行中声明时才有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63488718/

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