2016-11-02 8 views
2

아주 기본적인 클래스 정의를 가진 펄 모듈 파일 MyClass.pm이 있습니다. 오브젝트 메소드를 사용하는 펄 맵

use strict; 
use warnings; 

package MyClass; 

sub new { 
    my $this = shift; 
    my $self = {}; 
    bless $self, $this; 
    return $self; 
} 

sub displayChar{ 
    my $self = shift; 
    my $char = shift; 
    print $char . "\n"; 
} 

1; 

또한 나는 MyClass의 인스턴스를 생성하는 myClass.pl 파일이 있습니다.

Use of uninitialized value $char in concatenation (.) or string at MyClass.pm line 16. 
: 나는 그것을 잘 작동 displayChar 메소드를 호출하지만 그 방법과지도 기능을 사용하려고 할 때 그것이 나에게 세 번 (한 번 배열 항목마다, 내 생각)이 오류를 제공

#!/usr/bin/perl 
use strict; 
use warnings; 

use MyClass; 
my $myClass = MyClass->new(); 

$myClass->displayChar('a'); # This line works right 

my @charArray = ('a', 'b', 'c'); 
map($myClass->displayChar, @charArray); 

지도 함수를 잘못 사용하고 있습니까? 아니면 첫 번째 매개 변수로 객체 메소드를 사용할 수 없습니까?

+2

'new MyClass'를 사용하지 마십시오. 이것은 Java가 아닙니다. 'new'는 키워드가 아닙니다. 'MyClass-> new()'는 장래에 혼란을 줄여 줄 것입니다. –

+1

예를 더 잘 설명하기 위해 질문을 편집했습니다. 팁 @DaveCross를 주셔서 감사합니다 – nanocv

답변

5

당신은 당신의 displayChar 방법에 값을 전달해야

map($myClass->displayChar($_), @charArray); 

map

는 로컬 배열의 각 값에 $ _ 변수를 설정합니다.

+1

그것은 고마워요! – nanocv

+6

@nanocv :'map '의 블록 버전이 더 명확 해짐을 알았습니다. - map {$ myClass-> displayChar ($ _)} @charArray;'. 또한,'map'에 의해 반환 된 목록을 가지고 뭔가를하지 않는다면, 대신에'foreach'를 사용해야합니다 - $ myClass-> displayChar ($ _) foreach @charArray;' –

+0

@DaveCross Ok, 고맙습니다. 감사합니다. – nanocv