gpt4 book ai didi

arrays - perl:为什么对匿名数组的引用是标量?

转载 作者:行者123 更新时间:2023-12-01 06:55:54 26 4
gpt4 key购买 nike

我已经 10 多年没有用 Perl 编程了,所以这对于更有经验的 Perl 程序员来说可能是显而易见的。我搜索了一个答案,但没有找到任何东西。

我的问题是:为什么对匿名数组的引用是标量?

例如在以下代码中:

#!/usr/bin/perl

use strict;
use feature qw(say);

my @array1 = ('one');
say 'array ref 1: ' . \@array1;
my @array2 = ('one', 'two');
say 'array ref 2: ' . \@array2;
say 'array ref 3: ' . \('one');
say 'array ref 4: ' . \('one', 'two');

exit 0;

结果是:
array ref 1: ARRAY(0x1e1b1c0)
array ref 2: ARRAY(0x1e1b190)
array ref 3: SCALAR(0x1e1b280)
array ref 4: SCALAR(0x1e10c40)

为什么数组引用 3 和数组引用 4 是标量?

最佳答案

所有引用都是标量。当您对引用进行字符串化时,它包括所引用内容的类型。这意味着你有一个标量的引用。
[ ]是构造数组的运算符。 ( )不创建任何数组。

你要

say 'array ref 3: ' . ['one'];
say 'array ref 4: ' . ['one', 'two'];

通常,括号只是改变优先级。如果这里是真的,
\('one', 'two')

将相当于
('one', \'two')

这是因为标量上下文中的逗号/列表运算符通常返回其最后一个表达式的计算结果。但是 \(...)是特殊情况,相当于以下更有用的构造:
(\'one', \'two')

Taking a reference to an enumerated list is not the same as using square brackets--instead it's the same as creating a list of references!

@list = (\$a, \@b, \%c);
@list = \($a, @b, %c); # same thing!


这意味着
say 'array ref 4: ' . \('one', 'two');

相当于
say 'array ref 4: ' . (\'one', \'two');

这相当于
say 'array ref 4: ' . \'two';

关于arrays - perl:为什么对匿名数组的引用是标量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34204893/

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