메서드를 호출하면 객체 자체가 장면 뒤에서 전달됩니다. 또는 하위가 bless을 사용하는 경우 생성자이며 클래스 이름이 대신 전달됩니다. 따라서 모든 메소드는 첫 번째 인수로 객체 또는 클래스 이름을 수신합니다. 나머지는 메소드에 명시 적으로 전달 된 인수입니다.
해시 참조{...}
을 전달하면 스칼라가됩니다. 따라서 $input
에 할당되며, "quitely"전달 된 클래스 이름은 $pkg
에 할당됩니다.
해시 참조하면서 그 인터페이스의 생성자는 가장 통상적으로 단순히 최종 평가 문 리턴 반환되기 때문에 return
생략해도
sub new {
my ($class, $input) = @_;
my $self = { %$input };
return bless $self, $class;
}
로 기입된다. 마지막 두 줄은 단순히 return bless { %$input }, $class;
으로 작성 될 수 있으며 (익명) hashref가 초기화되어 패키지 $class
에 축복되어 반환됩니다.
그러나 일반적으로 인수를 처리하려고합니다. 하나의 경우 은이 클래스에서 지원하는 것과 일치하는지 확인해야하며 사용자가 전달한 키를 맹목적으로 특성에 할당하는 것이 아닙니다. 그런 다음 기본값을 제공하고 필요한 경우 값을 확인하십시오.
이 초기화는 종종 별도의 서브 루틴으로 나뉩니다.new
$self
에서 갱신되도록 기준 코드를 통해 "백"을 기입 예
sub new {
my ($class, $input) = @_;
my $self = {};
bless $self, $class; # $self is an object now
$self->_init($input); # on which methods can be called
return $self;
}
sub _init {
my ($self, $args) = @_;
# Check arguments, work out defaults (etc),
# then assign to self as appropriate
%$self = %$args;
}
들어.
이
는 "보통"으로 호출
my $new_obj = P_module->new({key => 'abc', other => '...'});
아닌 간접 new P_module
표기로 사용한다. 일반적으로 new
이라고하는 생성자는 보통 bless
해시 참조를 제공하므로 (따라서 객체 대신 클래스 이름이 전달됨) 해당 패키지를 "인식"하여 객체입니다.
문학 : perlmod (클래스는 패키지), 자습서 perlootut 및 참조 perlobj.
Perl에 내장 된 객체 지향 시설에 익숙해지면, 내가 권장하는 바에 따르면이 모든 것을 (그리고 훨씬 더) 쉽게 할 수있는 많은 모듈이 있습니다.
가장 먼저 추천하는 것은 매우 현대적인 Moose이며 그 경량 대응 물은 Moo입니다.
대단히 감사합니다. 그것은 매우 도움이 된 설명이었습니다 :) –