gpt4 book ai didi

perl - 为现有子动态添加前导下划线

转载 作者:行者123 更新时间:2023-12-03 13:32:28 25 4
gpt4 key购买 nike

在 perl book 的这个例子中,“_components”是从哪里来的?
我知道添加 _ 表示 sub 是包私有(private)的,但这个似乎无处不在使用领先分数。你能给我指出一些关于这个的来源吗?谢谢你。

package Computer;
@ISA = qw(StoreItem);

sub new {
my $pkg = shift;
my $obj = $pkg->SUPER::new("Computer", 0,0);
$obj->{_components} = [];
$obj->components(@_);
$obj;
}

sub components {
my $obj = shift;
@_ ? push (@{$ojb->{_components}}, @_) : @{$obj->{_components}};
}

sub price {
my $obj = shift;
my $price = 0;
my $component;
for my $component ($obj->components()) {
$price += $component->price();
}
$price;
}

最佳答案

_components$obj 的文字键哈希引用。它不是“来自”任何地方。这是 Perl 语法的一个怪癖。在声明中

$obj->{_components} = [];
$obj是对新创建的类实例的引用(在前面的语句中)和 _components在该实例中被定义为键,并被初始化为对空数组的引用。这相当于
$obj->{'_components'} = [];
例如
$ perl -de0

Loading DB routines from perl5db.pl version 1.55
Editor support available.

Enter h or 'h h' for help, or 'man perldebug' for more help.

main::(-e:1): 0
DB<1> $obj->{a} = "hello";

DB<2> x $obj
0 HASH(0x800756bf8)
'a' => 'hello'
DB<3> p $obj->{'a'}
hello
DB<4> p $obj->{a}
hello
DB<5>

关于perl - 为现有子动态添加前导下划线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65645504/

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