1
6
不要将PBP用于对象实践。它很古老。实际上,关于Perl和对象的最佳实践可以在 Moose 几乎是Perl必须具备的功能。 简而言之,Perl模糊名称空间和类的方式,大多数方法可以在类上静态调用。这不是坏事,只是不要记录下来。实际上没有理由要将这些方法密封到实例中。没有私人方法是有点烦人,但不依赖非法方法的惯例是如此的强烈,它已经足够我们的社区。 特性实际上是一个角色(不允许实例化),可以在运行时编译为对象。这将进一步模糊典型用户的方法来源(因为它们不在原始类中),但它是以运行时为代价的。 见 MooseX::Traits 有关特性的更多信息。 预先准备好的下划线是进一步说明这种方法对窥视者来说是私有的一种很好的约定。 最后一点要注意的是,如果您真的想推动这个问题,您可能可以使用class::mop::class->create_an_class()使用这些方法创建一个匿名类。 |
2
11
|
3
6
某种程度上。不能隐藏已安装到符号表中的子例程,但可以使用词法变量保存对匿名子例程的引用:
因为
|
4
1
我处理这个问题的方法是在方法的开头添加类似这样的内容:
这绝不是真正的封装,但它确实意味着通过包调用您的人必须将对象实例作为第一个参数传递。在Perl中,我发现保护我的API的恶意用户没有多大意义——这只会帮助我捕获意外尝试将方法调用为类方法的情况(这种情况比我想承认的更常见)。 就我个人而言,我认为强调约定+将方法清晰地记录为私有(或者根本不记录它,这样它就不会出现在pod中)就足以用于现实世界。这也是它在Python中的工作方式。它是 language philosophy 不限制用户。
|