2011-04-13 4 views
3

다음 코드를 고려하십시오.클래스 메소드에서 Moose 속성에 액세스하려면 어떻게해야합니까?

package Test1; 
use Moose; 

has 'something' => (
    is => 'rw', 
    default => 'BLAH!' 
); 

sub printSomething { 
    my ($self) = @_; 
    ## What should I use here to get the value of something? 
    print $self->something; 
} 

package Test2; 

Test1->printSomething(); 

printSomethingsomething에 어떻게 액세스 할 수 있습니까?

+0

왜 클래스 메소드에 액세스 할 수있는 속성이 있다고 기대할 수 있는지 설명 할 수 있습니까? 실제로 성취하려는 것은 무엇입니까? – ysth

+0

쿼리 할 DB를 알기 위해 'table'속성을 사용하는 'find'클래스 메소드를 가진 사람 클래스는 어떻습니까? –

+0

그리고 테이블 속성을 찾기 위해 한 가지, 다른 호출을 찾기 위해 다른 것을 원한다면 어떻게 제어합니까? – ysth

답변

15

수 없습니다. 속성 기본값을 구성하려면 Test1 객체를 인스턴스화해야합니다. 그들은 수업 시간에 어울리지 않습니다.

당신이 무스의 진정한 클래스 속성을 원하는 경우에, 당신은 뭔가 이상 닫고 그것을 반환하는 방법을 쓸 수 있습니다 :

물론
{ 
    my $class_attr = 'BLAH!'; 
    sub something { 
     return $class_attr; 
    } 
} 

, 당신은 세터와 clearers을 추가 할 수있는 좀 더 작업을해야을 당신이 그것들을 필요로한다면, 이것 저것. 더 좋은 방법은 다음과 같이 MooseX::ClassAttribute을 사용하는 것입니다

클래스 속성의 무스 인식하고, 자동으로 메타 반성의 선 (善)에 추가 할 수있는 장점이있다
package Test1; 

use Moose; 
use MooseX::ClassAttribute; 

class_has 'something' => ( 
    is  => 'rw', 
    default => 'BLAH!' 
); 

.

관련 문제