【发布时间】:2011-12-06 14:29:33
【问题描述】:
我一直遇到解除引用的问题,尤其是在从函数返回值时。
问题似乎是,每当您返回标量以外的任何内容时,您实际上都是通过引用返回该对象 - 这对我来说很好 - 但是当我们将这些引用传递给其他函数时,我们需要再次访问它们的胆量我们如何正确地做到这一点?
我不断遇到错误,例如:“期望偶数个参数得到引用” 或类似的东西。
我可以使用一个通用的经验法则来简化整个过程吗?我几乎希望我不必担心取消引用!
这是我今天早些时候尝试做的一个示例,但遇到了各种取消引用问题,我花了几个小时试图解决这个问题 - 所以在阅读、尝试和失败之后,我就在这里向你询问内幕。
人物对象
Person
has name [Str]
has madeby [Str]
has height [Num]
has id [Num]
制作 Person 对象的各种方法
sub person_maker{
my($this,%options) = @_;
my $person = Person->new(%options);
return $person;
}
sub make_person_named_james{
my($this,$options) = @_;
my $default = { name => 'James', madeby => 'name' };
$options = ($options,$defaults); #merge default and options hash
return($this->person_maker($options));
}
sub make_person_from_id{
my($this,$id) = @_;
my $default = { name => 'nameless person', madeby => 'id' };
$default = ($default,{ id => $id });
return($this->person_maker($default);
}
sub make_person_from_person{
my($this,$person) = @_;
my $person_options = {
name => $person->name().'_twin',
height => $person->height(),
id => $person->id() + 1,
madeby => 'person'
};
return($this->person_make($person_options));
}
- Func 返回 hash 对象 => 它实际上作为 hash 返回 参考
- Func 返回 hash 引用 => 它实际上返回一个 标量
- Func 返回 array 对象 => 它实际上返回一个 array 参考
- Func 返回 数组引用 => 它实际上返回一个 标量 ?
- Func 返回一个 标量 => 它实际上返回了 标量?
如果我理解错了,请纠正我。
那么对我来说另一个问题是使用函数的参数..
根据我返回的内容,这些坏男孩的行为都会有所不同!
sub myfunc{
my($self,$args) = @_ # list of arguments (what if the args are mixed?)
OR
my($self,$args) = $_ # scalar (this wont work here $args will by undef
OR
my $self = shift; # pop the first arg
my $args = shift; # pop the second arg
OR
my $self = $_[0]
my $args = $_[1]
另外!那里有太多的文档,其中许多已经过时,因此很难确切地确定在这些情况下应该做什么或最好的事情。
如果有人有一张神奇的图表,说明何时使用这些不同的设置,以及如何在某些场景下取消引用,祝福哈希、哈希引用、标量等。我会永远感激,因为我已经浪费了几个小时来尝试来破译这个。
【问题讨论】:
标签: perl oop return-value dereference