2011-02-11 68 views
12

我有一個Moose類是打算被子類化的,每個子類都必須實現一個「執行」方法。不過,我想將方法​​修飾符應用於我的類中的execute方法,以便它適用於所有子類中的execute方法。但方法修飾符在方法被覆蓋時不會被保留。有沒有辦法確保我的類的所有子類都將我的方法修飾符應用於其執行方法?在Perl/Moose中,如何將修飾符應用於所有子類中的方法?

例子:在一個超類,我有這樣的:

before execute => sub { 
    print "Before modifier is executing.\n" 
} 

然後,在一個子類:

sub execute { 
    print "Execute method is running.\n" 
} 

當執行方法被調用,它沒有說任何東西「之前」修飾符。

回答

9

這是augment方法修飾符的用途。你可以把你的超這樣的:

sub execute { 
    print "This runs before the subclass code"; 
    inner(); 
    print "This runs after the subclass code"; 
} 

然後,而不是讓你的子類直接覆蓋execute的,你有他們augment它:

augment 'execute' => sub { 
    print "This is the subclass method"; 
}; 

基本上,它給你的功能,就像在around除了父/子關係改變之外。

+2

嗯。我忘了提及我的超類實際上繼承了另一個非Moose類,它希望它的子類聲明一個execute方法,所以augment/inner將不起作用。但我同意這是一般的解決方案。至於我的具體問題,我發現我可以簡單地將我的修飾符放在調用*的方法上,因爲該方法在子類中永遠不會被重新定義或覆蓋。所以我想我會接受這件事。 – 2011-02-11 05:09:03

相關問題