扩展Pharo Smalltalk类行为的最佳方法是什么?

时间:2011-02-02 01:18:46

标签: smalltalk pharo

我想用一个方法扩展String类,从字符串中创建一个url slug。我在这里找到了一个链接,显示了如何将扩展移动到他们自己的包中:

Smalltalk Daily 07/13/10: Extending Behavior II

但是,我在Pharo Smalltalk中找不到任何“移动到打包”选项。是否可以使用新方法扩展核心类,还是有更好的方法?

3 个答案:

答案 0 :(得分:8)

在Pharo或Squeak中,将 MyPackage 的扩展方法放在名为*mypackage的方法类别中(或者如果您想要更具描述性*mypackage-slug)。

这些类别中的方法自动属于 MyPackage 包(至少从蒙蒂塞洛的角度来看)

答案 1 :(得分:8)

“使用新方法扩展核心类是否可以,或者有更好的方法吗?”

这个决定存在权衡。实际上,直到最近,it was removed as part of cleaning the system时,Pharo才有String>> asUrl。一方面,有些人(参见Kent Beck的最佳实践)认为在没有类似协议的对象之间有转换方法(在语义上相似)。此外,这会导致膨胀的核心类(如String和Object)。但是,在您自己的应用程序中,可能有一个很好的理由来平衡这些因素,并且由于您将其与应用程序打包在一起而不是与系统打包,因此无法实现。

答案 2 :(得分:0)

在pharo 7中,*是禁止的。

一条消息告诉您必须在方法版本窗格中选中扩展名复选框。

如果这样做,则可以选择您的包裹。