2013-12-11 8 views
6

私はダンサーのアプリモジュールに次のコードがあります。ダンサーでオブジェクトをインスタンス化して表示する値を返すことはできますか?

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; 

を私は.plのファイルでそれをテストしている場合だけで正常に動作しDice.pm呼ばMoopsクラスを持っていますが、私はそれにアクセスしようとすると、 パッケージ "Dice"を介してオブジェクトメソッド "new"を見つけることができません(おそらく "Dice"を読み込むことを忘れてしまったでしょうか)

ダンサーでこれを行うことはできますか?ここで

がDice.pmから適切なコードです:

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

@ThisSuitIsBlackNotエラーメッセージには、「ダイスを使用してください」というメッセージが表示されます。 –

+0

ダイスは実際にスクリプトの一番上にあります。スクリプト全体を表示するようにコードを更新しました。 – BackPacker777

答えて

3

私はあなたのDice.pmpackage Diceを忘れてしまったと言うつもりだったが、Moopsにまで読んだ後、私は名前空間について混乱しています。

documentation for Moopsを見てみましょう。

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 

class Diceが、私はこれを正しく読めば、それは実際にDice::DiceなりDice.pmである場合。したがって、use DiceにしてDice::Dice->newでオブジェクトを作成する必要があります。

Moopsを使用してDice.pm内のパッケージ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

私はあなたの実装を変更し、それは動作します!私はダブルコロンでクラスを宣言しましたが、このようにインスタンス化されました:Dice-> new – BackPacker777

関連する問題