2013-12-11 13 views
6

Ben benim Dansçı uygulaması modülünde aşağıdaki kod: Ben bir .pl dosyası ile test eğer sadece çalışıyor Dice.pm adında bir Moops sınıf var ama çalıştığınızda erişim içinGörüntülenecek bir değer döndürmek için Dancer'daki bir nesneyi örneklendirebilir miyim?

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; 

Web tarayıcısından aşağıdaki hatayı alıyorum: "Dice" ("Dice") paketini kullanarak "new" nesne yöntemini bulamıyorsunuz (belki de "Dice" yi yüklemeyi unutmuştunuz?).

Bunu Dancer ile yapabilir miyim? Ben ad alanları hakkında karıştı

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

seni varsayalım 'kullanımı Zar; '? – ThisSuitIsBlackNot

+0

@ThisSuitIsBlackNot Hata iletisi, * dont * 'ın Dice kullanacağını,' –

+0

Use Dice 'in de betiğin en üstünde olduğunu gösterir. Tüm senaryoyu göstermek için kodu güncelledim. – BackPacker777

cevap

3

ben size Dice.pm yılında package Dice unuttum diyecektim ama Moops üzerinde okuduktan sonra:

İşte Dice.pm gelen ilgili kodudur.

documentation for Moops'a bir bakalım. class DiceDice.pm ise bunu doğru okursanız

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 

aslında Dice::Dice haline gelecektir. Yani use Dice'a sahip olmanız ve Dice::Dice->new ile nesneyi oluşturmanız gerekir. Dice.pm Moops kullanarak içinde paket Dice hale getirmek için

, ben böyle sınıf bildirmek gerekir inanıyoruz:

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(); 
    } 
} 

Sonra yapabilirsiniz:

use Dice; 
Dice->new; 
+0

Bu davranışı biraz garip bulmalıyım. – simbabque

+0

Önerilerinizi uygularım ancak aynı hatayı alıyorum. Detaylı cevap için teşekkürler! – BackPacker777

+0

Uygulamanızı değiştirdim ve işe yarıyor! Sınıfı çift kolonlarla açıkladım, ancak şu şekilde özetledim: Zar-> yeni – BackPacker777

İlgili konular