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包)?
首先,一个功能点:如果第二类是继承自的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调用格式.