2010-10-02 51 views
14

我習慣於在Java中工作,所以也許這個問題是一個面向Java的Perl問題......無論如何,我已經使用Moose創建了一個Person包。我應該如何在Perl中定義'靜態'子程序?

現在我想添加幾個「靜態」的子程序,也就是說,他們並不是指特定的Person,而是仍然與Person包密切相關。例如,sub sort_persons獲取一組Person對象。

在Java中,我只是簡單地聲明static等函數。但在Perl中......通用的方法是什麼?

p.s.我認爲我所指的Perlish術語是「分類方法」

+0

@FM說的正是我的思路。看到我的評論eugene y :) – 2010-10-02 13:21:23

回答

16

Perl中沒有這樣的靜態方法。適用於整個班級的方法通常稱爲班級方法。這些僅通過實例方法通過它們的第一個參數(它是一個包名稱,而不是一個對象)的類型加以區分。像大多數Perl類中的new()一樣,構造函數方法是類方法的常見示例。

如果你想有一個特別的方法要調用一個類的方法只有,做這樣的事情:

sub class_method { 
    my ($class, @args) = @_; 
    die "class method invoked on object" if ref $class; 
    # your code   
} 
+0

+1我只是「發現」它自己:)我想最常見的例子是'新()',我從來沒有想過的'靜態'方面,但它顯然是。 – 2010-10-02 13:08:00

+0

除非有某些原因,否則在對象上調用類方法會很糟糕,否則我會跳過檢查'ref $ self'。 – cjm 2010-10-02 17:18:17

+2

爲了幫助區分類方法和對象方法,我喜歡使用'$ class'作爲包含調用者的變量。所以'sub class_method {my($ class,@params)= @_; #blah}' – daotoad 2010-10-02 23:16:08

相關問題