특정 인수를 생성자 유형에 전달하는 다양한 방법에 대해 다소 혼란 스럽습니다. 해시 참조 \%hash
또는 목록 foo => 1, bar => 1
은 전달하지만 다른 하나는 croak
이 전달됩니다 (예 : (single elements, array reference)
).전달 된 생성자 인수가 해시 유형이 아닌 한 잘못된 인수가있는 경우?
예를 들어, 내 참조 또는 목록을 ... 통과 (This works for the way I do this)
my $obj = foo->new;
my $data = $obj->dump(\%hash);
my $data = $obj->dump(foo => 1, bar => 1);
또는
패키지 모듈은my $obj = foo->dump(\%hash);
my $obj = foo->dump(foo => 1, bar => 1);
:
package foo;
use strict;
use Carp;
use Scalar::Util qw/reftype/;
sub new { return bless {}, shift }
sub dump {
my $class = shift;
my $self = shift;
unless (reftype($self) eq reftype {}) {
croak("Constructor method not a hash type!");
}
}
1;
나는 또한 조건부 사용에 대한 생각 했어 여기서 ? :
연산자를 사용하지만 오류가 제대로 발생하지 않습니다.
my $self = reftype($_[0]) eq reftype {} ? shift : {@_};
더 좋은 방법이 있습니까?
여기서 'new()'가 호출되지 않는다는 것을 알고 계십니까? 그것은 당신의 질문과 직접적으로 관련이 없지만, 당신이 객체 지향 Perl 모듈'$ self'에서 변수를 호출하면, 명시 적 매개 변수 중 하나가 아니라'$ self'를 포함해야한다고 생각합니다. – innaM
예, 방금 사용하거나 "my $ obj = foo-> new로 사용할 수있는 곳으로 만들었습니다. my $ data = $ obj-> dump (..)'그리고 당신은''$ self와 not one ... '을 정확히 의미합니까? – hwnd