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

xof*_*ofz 6 smalltalk pharo

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

Smalltalk每日07/13/10:扩展行为II.

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

Ale*_*min 8

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

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


Sea*_*ris 8

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

这个决定有一些权衡.实际上,Pharo直到最近才将String >> asUrl 作为清理系统的一部分进行删除.一方面,有些人(参见Kent Beck的最佳实践)认为在没有类似协议的对象之间有转换方法(在语义上相似).此外,这会导致膨胀的核心类(如String和Object).但是,在您自己的应用程序中,可能有充分的理由来平衡这些因素,并且由于您将其与应用程序打包在一起,而不是与系统打包,因此可能会失败.