2010-08-19 49 views
0

首先,我不確定需要包含多少信息,因爲我很難追蹤此問題的起源。不能在角色中設置班級的屬性

我對此(以及其他一些東西)試圖設置屬性像這樣一類的子常規的駝鹿作用:

$genre = Movie::Genre->new({ 
    genreName => 'Drama', 
    genreID => '1' 
       }); 

的問題是,事實並非如此。後立即$genre轉儲,表明它仍然是空的:

$genre: bless({}, 'Movie::Genre')

更奇怪的是,當我在我的測試文件執行相同的一行,它的工作原理與此轉儲預期:

$genre: bless({ 
      genreID => '1', 
      genreName => 'Drama' 
      }, 'Movie::Genre') 

我正在努力尋找使這兩行代碼不同的原因,導致一個工作,一個失敗。

關於什麼情況會導致第一個示例失敗並允許第二個成功的任何想法?如果有必要,我很樂意提供更多的上下文。謝謝!

回答

2

該行只是將這些參數傳遞給Movie :: Genre構造函數。由構造函數決定如何處理它們。

這聽起來像是在Movie :: Genre類獲取了屬性genreNamegenreID之前,該調用(在角色中)正在執行。默認情況下,Moose構造函數忽略任何他們不認識的參數,所以這不會產生警告。

將屬性添加到Movie :: Genre後,您的測試文件必須正在進行該調用。

我們必須看到更多的代碼才能明確發生這種情況的原因。

+0

謝謝 - 你完全正確。我有很長的一系列角色,經過一番調查,誰先打電話給誰,又是誰洗牌,問題就解決了。 – Ryan 2010-08-19 01:35:44

+0

構建多個角色(長鏈)的推薦方式是使用qw(Role1 Role2 Role3);''進行單個調用。這樣構圖是無序的,不應該影響你。但實際上這可能不會每次都有效(因爲執行的怪癖),多次調用'with()'可以創建一個有序的組合。 – perigrin 2010-08-19 03:19:25