2011-10-14 43 views
2

我想從一個基類中導出一個簡單的函數,這個基類全部在我的子類中使用,而不必一直使用$ self-> myfunc(),只需一個簡單的func()調用即可。如何使用Moose :: Exporter導出函數?

我試圖從Moose::Exporter

與示例這樣做,但我不明白什麼

as_is  => [ 'sugar3', \&Some::Random::thing ], 

在做,作爲例子似乎不完整的。 sugar3沒有定義在任何地方,所以我不知道在哪裏或如何使用它。我現在可以在子類中調用sugar3()嗎?是sugar3()一些祕密駝鹿的東西?

,然後是這個東西......從字面上

thing; 

已導出,但我不知道是什麼東西做,因爲沒有它的例子。這是一個函數調用嗎?

不管怎麼說,更重要的是你怎麼導出像你這樣的功能通常會與出口商做的,而是用駝鹿出口商相反,如果我的基類有3個級別的繼承後會發生什麼,將所有的子子類可以訪問這個導出的函數?

+1

這不是一個很大的幫助,但考慮嘗試搗碎OO繼承和像這樣的包語法只是給了我heebie-jeebies。你確定沒有更好的方法去做你想做的事嗎?此外,我相當肯定(雖然我也可能很容易出錯),無論如何,使用父「無論」最終都不會導入函數到本地包中,因此它聽起來沒有任何不同於出口方作品。 – Oesor

+0

即時通訊不試圖搗碎任何東西,我只是使用一個函數調用很多來調試打印和測試的東西,但我會清理它時,即時完成=]。無論如何,我仍然想知道這是如何工作的。 +1感謝分享你對這個 – qodeninja

+2

的想法'$ self-> myfunc()'和'myfunc()'是兩個完全不同的東西,你不應該寫一個方法然後試圖將它作爲一個子文件導出。導出的*函數*將無法訪問該對象 - 也就是說,它不是*面向對象的*。 – Ether

回答

3

as_is => [ ... ]

函數名或子引用的這份名單將出口原樣。你可以通過引用來識別一個子程序,這可以直接通過引用( \&Some::Package::function)直接重新導出一些其他模塊的功能。

sugar3是要導出的子名稱。

是的,你現在可以在子類中調用sugar3,如果這是你導出的地方。也就是說,出口(除常數外的任何東西)通常都是奇怪的。

是的,thing;是一個子呼叫。在no strict;下,它也可以與'thing';相同。

子類將不能訪問該子,除非它被稱爲方法(例如$o->thing;而不是thing;)。但是,導出方法非常奇怪。創建一個Moose :: Role來爲一個類提供方法。

+0

所以這基本上是出口 - 使用角色?有沒有辦法不必每次輸入$ self-> func()? - 不像我會死去,如果我不能= P問題是一些較古老的書庫不使用麋,我仍然使用他們的出口,所以爲什麼我不能在麋做呢? – qodeninja

+1

@nodebunny,方法需要'$ self-> func()'。我沒有說你不能導出方法,我說這是非常奇怪的。 – ikegami

+0

感謝@ikegami +1 – qodeninja