gpt4 book ai didi

perl - 为什么 Perl 允许通过引用传递参数?

转载 作者:行者123 更新时间:2023-12-04 16:32:26 25 4
gpt4 key购买 nike

我想知道为什么 Perl 能够通过引用函数来传递参数?
我知道 Python 和 Ruby 都没有这样的功能。

最佳答案

将一件事与另一件事区分开来是很有用的。

(1) 通过引用将参数传递给子程序。这在 Perl 中很有用,因为该语言将所有参数作为未区分的值列表传递给子例程。如果没有通过引用传递数据结构的能力,例如,采用两个列表的函数的设计者将无法将列表分开。此外,如果数据结构很大,通过引用传递它们可以提供性能增益。

process_two_lists( @x,  @y); # Can't distinguish the lists.
process_two_lists(\@x, \@y); # Can.

因为 Python 和 Ruby 的设计不同,所以它们在传递参数的方式上不需要这种区别。 Python 或 Ruby 中的类似方法将接收两个不同的参数(表示列表 xy 的两个对象)。

(2) Perl 的行为由此 @_作为传递参数的别名,允许子例程修改调用者感知的数据。
sub add_ten_to_me {
$_[0] += 10;
}

my $x = 1;
add_ten_to_me($x);
say $x; # 11 Amazing!

Python 和 Ruby 也可以做这种事情;但是,有一些资格。 Python 区分可变对象和不可变对象(immutable对象)。如果您将可变的东西传递给 Python 方法(例如列表),则该方法能够修改数据结构。所以 process_two_lists 的 Python 版本将能够同时修改 xy .但是,接收不可变对象(immutable对象)(例如整数)的函数不会。因此, add_ten_to_me 的直接 Python 模拟行不通。 [我相信关于 Ruby 也可以提出类似的观点,但我目前对细节不太熟悉。]

关于perl - 为什么 Perl 允许通过引用传递参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990634/

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