Perl:Static vs Package方法

And*_*dyH 2 perl static package

我需要创建一个将由其他开发人员使用的包.实现静态方法的最佳方法是什么?对于静态(类)方法,我必须期望第一个参数$ class,并且必须将方法作为类方法调用:

My::Package->Sub1();
Run Code Online (Sandbox Code Playgroud)

从另一方面,我可以写一个"常规"包子程序(没有预期的$ class参数),它将完美地做同样的事情,但需要以不同的方式调用

My::Package::Sub1();
Run Code Online (Sandbox Code Playgroud)

因此,基本上与业务功能的角度没有区别(至少我没有看到它,除了通过第一个参数的包名称可用性),但实现和调用有两种不同的方式.有点令人困惑.我应该使用哪种方式?何时使用?有一些规则吗?另外,我应该检查方法是否按预期调用(静态vs包)?

tjd*_*tjd 5

首先,一个功能点:如果第二类是继承自的My::Package,Child::Class::Sub1()将是未定义的,如果Sub1被写为非OO子程序,Child::Class->Sub1()则将忽略它被调用的事实Child::Class.

因此,为了程序员使用您的模块,您需要使Package/Class中的所有子例程响应一致的调用结构/方法.您的模块应该是子例程/函数或充满方法的.如果它的一部分是OO,那么将其全部用于OO.可以创建子程序以在混合模式下运行,但这会不必要地使代码复杂化,并且似乎在CPAN上已经过时了.

现在,如果真的没有理由区分My::Package->Sub1()Child::Class->Sub1(),那么你可以随意忽略你将被传递的隐式类名参数.这并不意味着您不应该期望该参数或者您应该鼓励在OO模块中使用非OO调用格式.