2009-09-01 7 views
1

이 같은 생성자 가질 수 있습니다이것은 Perl 생성자 호출에 해당하는 함수 호출입니까?

sub create { 
    my $class = shift; 
    my $self = {}; 
    return bless $self,$class; 
} 

을 나는 물체를 만들 때,이 쓸 수 있습니다 :

my $object = create Object; 

이 있습니다 :

my $object = Object::create("Object"); 

에 대한 유일한 동등한 그 생성자 호출? 당신이 화살표 구문없이 create 함수의 정규화 된 이름을 사용하는 경우

+1

'

$object
'을 코드 블록 앞에 4 칸 붙이거나 그냥 선택하고 ** ** [Ctrl]'** + **'[K]'를 누르면됩니다. **. –

+2

생성자의 이름으로'new'를 사용하는 것은 매우 일반적인 관례입니다. 그래, 원한다면 작동시킬 수도 있지만, 그 일은 거의 기억이 나지 않습니다 (비트가 심한 경우). 또한 Moose (http://moose.perl.org/)를 조사하고 싶을 수도 있습니다. Perl에 대한 매우 강력한 OO 시스템으로 많은 중복 코드를 입력하지 않아도됩니다 ('unsweetened'예제 참조). http : /search.cpan.org/dist/Moose/lib/Moose/Manual/Unsweetened.pod) – daotoad

답변

5

아니, 해당 호출은

my $object = Object->create(); 

, 당신은 펄의 OO 방법 파견을 통해 갈 수 없습니다, 따라서 상속 방법은 것입니다 작동하지.

화살표 구문은 "간접적 인"create Object 구문보다 선호됩니다. 이유에 대해서는 this question을 참조하십시오.

+0

모든 상응하는 전화를 말해 줄 수 있습니까? 각 구문의 부작용은 신경 쓰지 않습니다. – Geo

+0

간접적 인'new Object'와 화살표 문법'Object-> new'는 간접적 인 형식에서 언급 한 구문 모호성 문제를 제외하고는 동일합니다. 다른 패키지에서 함수를 호출하는 유일한 방법은 정규화 된 이름을 사용하는 것입니다. 현재 패키지에서'new()'를 호출하는 것과 똑같이 동작하는'Object :: new()'입니다. – friedo

관련 문제