我想用一个方法扩展String类,从字符串中创建一个url slug。我在这里找到了一个链接,显示了如何将扩展移动到他们自己的包中:
Smalltalk Daily 07/13/10: Extending Behavior II
但是,我在Pharo Smalltalk中找不到任何“移动到打包”选项。是否可以使用新方法扩展核心类,还是有更好的方法?
答案 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中,*是禁止的。
一条消息告诉您必须在方法版本窗格中选中扩展名复选框。
如果这样做,则可以选择您的包裹。