我应该如何在Perl中定义"静态"子程序?

Dav*_*d B 17 oop perl static-methods packages function

我以前在Java工作,所以也许这个问题是面向Java的Perl问题......无论如何,我已经创建了一个PersonMoose.

现在,我想添加一些"静态"的子程序,也就是说,它们不是指特定的Person,但仍然与Person包密切相关.例如,sub sort_persons获取一个Person对象数组.

在Java中,我只是声明这样的函数static.但是在Perl中......这样做的常见方法是什么?

ps我认为我所指的Perlish术语是"类方法".

Eug*_*ash 18

在Perl中没有静态方法这样的东西.适用于整个类的方法通常称为类方法.这些仅通过其第一个参数的类型(它是包名称,而不是对象)与实例方法区分开来.与new()大多数Perl类一样,构造方法是类方法的常见示例.

如果你想要一个特定的方法要调用一个类的方法,做这样的事情:

sub class_method {
    my ($class, @args) = @_;
    die "class method invoked on object" if ref $class;
    # your code        
} 
Run Code Online (Sandbox Code Playgroud)

  • 为了帮助区分类方法和对象方法,我喜欢使用`$ class`作为保存调用者的变量.所以`sub class_method {my($ class,@ params)= @_; #blah}` (4认同)