2017-05-05 33 views
0

我想在perl.In萬一有人MI類的聲明結構不知道這個模塊:http://perldoc.perl.org/Class/Struct.html 這是我的代碼:申報結構的Perl

package object; 
sub new{ 
    my $class = shift; 
    struct('object', { hashMap => '%', array => '@' }); 
    my $self = { 
     'object::hashMap' => shift , 
     'object::array' => shift , 
     _toret => shift // 0, 
    }; 
    $self->{_toret} = new object; 
    return bless $self, $class;  
} 

,如果我想從我得到hasMap struct,我應該將一個對象叫做這個 結構體,但我不想在函數中聲明它,因爲每次我引用函數時,我都會丟失數據。所以我在類中聲明它。問題是,當我這樣做的功能,以獲得hasMap這給了我錯誤,並告訴我,這水溼被引用到的HashMap

sub get{ 
     my($self) [email protected]_; 
     return $self->{_toret}->hashMap; 
    } 

我希望你能幫助我。謝謝!!

+0

你是什麼意思由'$ self - > {_ toret} =>新對象;'?你的意思是'='而不是? – choroba

+0

從'object :: new'調用'new object'類似無限遞歸。 – choroba

+0

哦,是的!是$ self - > {_ toret} =新對象;這是一個錯誤,但仍然失敗 –

回答

4

我覺得你太過於龐大。應該從頂層包代碼中調用struct()函數,而不是從構造函數中調用(調用struct()爲您創建一個名爲new()的構造函數)。並從new()內調用new()看起來像是一場災難。

你已經描述了什麼不起作用,但是你沒有描述你想要達到的目標。我認爲你想要這個(但是,沒有更多的細節,我真的不能確定)。

# Object is a terrible name for a class. 
# But if you insist on using it, at least capitalise the name. 
# Lowercase names are reserved for pragmata in Perl. 
package Object; 

use Class::Struct; 

struct(hashMap => '%', array => '@'); 

1; 

然後,您可以使用你的類是這樣的:

use Object; 

my $obj = Object->new(
    hashMap => { foo => 1, bar => 2, baz => 3}, 
    array => [ 0 .. 10] 
); 

say $obj->hashMap->{foo}; # prints 1 
say $obj->array->[10]; # prints 10 

如果這不是你想要的,你需要解釋了很多關於你正在嘗試做的。