gpt4 book ai didi

arrays - 为什么这些分配数组/列表的不同方法会产生不同的值?

转载 作者:行者123 更新时间:2023-12-02 06:00:34 25 4
gpt4 key购买 nike

@rt = (10,9,8);
my ($x)=@rt;
$y = @rt;
$z = (10,9,8);
print "\$x=$x,\$y=$y,\$z=$z\n";

输出:$x=10,$y=3,$z=8

为什么 $x,$y,$z 的值不同?为什么 $z 值不等于 @rt 的大小?

$x = $rt[0]
$y = Scalar(@rt)
$z = $rt[2]

为什么将数组分配给具有不同值的标量差别不大?这让我觉得 Perl 很乏味,或者在编码时需要小心。请对此发表评论。

最佳答案

Perl 有两种不同的赋值运算符,标量赋值运算符和列表赋值运算符。哪个赋值在句法上取决于左边出现的内容;如果是数组、散列、切片或带括号的表达式,则它是列表赋值;否则它是一个标量赋值。列表赋值给出了它们正确的操作数列表上下文;标量赋值给出其正确的操作数标量上下文。

一次拿一个:

@rt = (10,9,8);

列表赋值。右操作数获取列表上下文。列表上下文中的逗号运算符组装一个列表,然后将其分配到数组中。

my ($x) = @rt;

列表赋值。右操作数获取列表上下文;列表上下文中的数组生成其元素的列表,这些元素被分配到列表中,该列表是列表赋值的左操作数。因为该列表只有一个标量元素,所以最终只会分配数组的第一个元素,而从数组生成的列表的其余元素将被丢弃。

$y = @rt;

标量赋值。右操作数获取标量上下文;标量上下文中的数组产生其长度,该长度被分配给赋值左侧的变量。

$z = (10,9,8);

标量赋值。右操作数获取标量上下文。标量上下文中的逗号运算符丢弃其左操作数并仅返回其右操作数,因此赋值的左操作数的值只是数字 8,它被赋值给赋值左侧的变量。

关于arrays - 为什么这些分配数组/列表的不同方法会产生不同的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26230574/

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