6

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

Smalltalk Daily 07/13/10:扩展行为 II

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

4

3 回答 3

8

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

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

于 2011-02-02T01:38:36.017 回答
8

“只用新方法扩展核心类就可以了,还是有更好的方法?”

这个决定需要权衡取舍。事实上,Pharo 直到最近才使用 String>>asUrl,当时它作为清理系统的一部分被删除。一方面,某些人(参见 Kent Beck 的最佳实践)认为在不具有相似协议(语义相似)的对象之间具有转换方法是不好的风格。此外,这会导致核心类(如 String 和 Object)臃肿。但是,在您自己的应用程序中,可能有一个很好的理由来平衡这些因素,并且由于您将其与您的应用程序而不是与系统一起打包,所以摇滚起来。

于 2011-02-03T02:34:09.053 回答
0

在pharo 7中,*是禁止的。

一条消息告诉您必须勾选方法编辑窗格中的扩展复选框。

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

于 2020-01-17T09:02:06.117 回答