OOP 펄에서의 멤버함수 참조 이용할려면
글쓴이: mr.lee / 작성시간: 목, 2005/08/25 - 8:08오후
제가 할려는것은 이렇습니다.
패키지(객체) 함수안에서 자기 패키지, 혹은 다른 패키지의 멤버함수의 참조를 로컬 변수에 대입하고, 그것을 콜하게 할려고 합니다.
단, 이때 콜된 함수에서는 각각 자기 객체의 bless된 self 해쉬멤버를 참조할 수 있어야 합니다.
이를테면 아래와 같은것을 할려고 합니다. 어떻게 하면 될련지요.
웬만한 방법은 다 써봐도 잘 안되는군요.
아래코드는 $self 객체를 받지 못하여 원하는 결과가 나오지 않습니다.
use strict; { package Class1; sub new { my $class = shift; my $self = { a => "Class1", }; bless($self, $class); return $self; } sub fun1 { my $self = shift; my ($arg) = @_; my $a = $self->{a}; print("$a: $arg\n"); } } { package Class2; sub new { my $class = shift; my $self = { a => "Class2", c => Class1->new(), }; bless($self, $class); return $self; } sub fun2 { my $self = shift; my ($arg) = @_; my $a = $self->{a}; print("$a: $arg\n"); } sub main { my $self = shift; my $ref1 = \&Class1::fun1; my $ref2 = \&fun2; $ref1->("ref1"); $ref2->("ref2"); } } Class2->new()->main();
Forums:
자답입니다. 일반적으로 함수 참조를 콜할때는 $funcRef->(a
자답입니다. 일반적으로 함수 참조를 콜할때는 $funcRef->(argument) 머 이런식이어야 하는데, 그런식으로는 에러나고..여튼 아래 2가지 방법으로 가능하네요. use strict 에서도 오류나지 않습니다.
위 코드에서 Class2::main 부분입니다.
인자를 넘겨야 하기 때문에... 여러 테스트를 해보았지만 $funRef-
인자를 넘겨야 하기 때문에... 여러 테스트를 해보았지만 $funRef->(arg) 나 $self->funRef->(arg) 머 이런식의 호출은 힘드네요. 위에서 두번째 방법으로는 아무 인자도 전달하기가 어렵고..첫번째 방법에서 객체를 인자로 넘길수 밖에 없군요.
댓글 달기