2013-12-11 3 views
6

나는이 내 댄서 응용 프로그램 모듈에 다음 코드 : 나는 내가 통해 .pl 파일을 테스트하면 잘 작동 Dice.pm라는 Moops 클래스를 가지고,하지만 난 때 액세스 할 수Dancer에서 객체를 인스턴스화하여 표시 할 값을 반환 할 수 있습니까?

package Deadlands; 
use Dancer ':syntax'; 
use Dice; 

our $VERSION = '0.1'; 

get '/' => sub { 
    my ($dieQty, $dieType); 
    $dieQty = param('dieQty'); 
    $dieType = param('dieType'); 
    if (defined $dieQty && defined $dieType) { 
     return Dice->new(dieType => $dieType, dieQty => $dieQty)->getStandardResult(); 
    } 
    template 'index'; 
}; 

true; 

웹 브라우저를 통해 다음과 같은 오류 메시지가 나타납니다. "Dice"패키지를 통해 "new"객체 메서드를 찾을 수 없습니다 ("주사위"를로드하는 것을 잊었을 수도 있습니다).

댄서와 함께이 작업을 수행 할 수 있습니까? 내가 네임 스페이스에 대한 혼란 스러워요

use 5.14.3; 
use Moops; 

class Dice 1.0 { 
    has dieType => (is => 'rw', isa => Int, required => 1); 
    has dieQty => (is => 'rw', isa => Int, required => 1); 
    has finalResult => (is => 'rw', isa => Int, required => 0); 

    method getStandardResult() { 
     $self->finalResult(int(rand($self->dieType()) + 1)); 
     return $self->finalResult(); 
    } 
} 
+0

내가 당신을 가정'사용 주사위,'? – ThisSuitIsBlackNot

+0

@ThisSuitIsBlack 아니요. 오류 메시지는 주사위를 사용하지 않았 음을 나타냅니다. –

+0

주사위는 실제로 스크립트 상단에 있습니다. 전체 스크립트를 표시하도록 코드를 업데이트했습니다. – BackPacker777

답변

3

나는 당신이 당신의 Dice.pmpackage Dice을 잊고 말을하려고했지만, Moops에 독서 후 :

여기 Dice.pm에서 관련 코드입니다.

documentation for Moops을 살펴 보겠습니다. class DiceDice.pm에있는 경우 내가 올바르게 읽을 경우

If you use Moops within a package other than main, then package names used within the declaration are "qualified" by that outer package, unless they contain "::". So for example:

package Quux; 
use Moops; 

class Foo { }  # declares Quux::Foo 

class Xyzzy::Foo # declares Xyzzy::Foo 
    extends Foo { } # ... extending Quux::Foo 

class ::Baz { }  # declares Baz 

실제로 Dice::Dice 될 것이다. 따라서 use Dice을 가지고 Dice::Dice->new으로 개체를 생성해야합니다. Dice.pm는 Moops를 사용하여 내 패키지 Dice을하기 위해

, 나는이 같은 클래스 선언 할 필요가 믿는 :

class ::Dice 1.0 { 
    # ^------------- there are two colons here! 

    has dieType => (is => 'rw', isa => Int, required => 1); 
    has dieQty => (is => 'rw', isa => Int, required => 1); 
    has finalResult => (is => 'rw', isa => Int, required => 0); 

    method getStandardResult() { 
     $self->finalResult(int(rand($self->dieType()) + 1)); 
     return $self->finalResult(); 
    } 
} 

을 당신은 할 수 있습니다 :

use Dice; 
Dice->new; 
+0

나는이 행동이 조금 이상하다고 생각합니다. – simbabque

+0

귀하의 제안을 구현했지만 아아 나는 같은 오류가 발생합니다. 상세한 답변을 보내 주셔서 감사합니다. – BackPacker777

+0

구현이 변경되었습니다. 나는 double 콜론을 사용하여 클래스를 선언했지만 다음과 같이 인스턴스화했습니다. Dice-> new – BackPacker777

관련 문제