【发布时间】:2011-02-02 01:18:46
【问题描述】:
我想用一种方法来扩展 String 类,以从字符串中创建一个 url slug。我在这里找到了一个链接,显示了如何将扩展移动到他们自己的包中:
Smalltalk Daily 07/13/10: Extending Behavior II.
但是,我在 Pharo Smalltalk 中找不到任何“移动到打包”选项。只用新方法扩展核心类可以吗,还是有更好的方法?
【问题讨论】:
我想用一种方法来扩展 String 类,以从字符串中创建一个 url slug。我在这里找到了一个链接,显示了如何将扩展移动到他们自己的包中:
Smalltalk Daily 07/13/10: Extending Behavior II.
但是,我在 Pharo Smalltalk 中找不到任何“移动到打包”选项。只用新方法扩展核心类可以吗,还是有更好的方法?
【问题讨论】:
在 Pharo 或 Squeak 中,将 MyPackage 的扩展方法放在一个名为 *mypackage 的方法类别中(或者如果您想要更具描述性的 *mypackage-slug)。
这些类别中的方法自动属于 MyPackage 包(至少从蒙蒂塞洛的角度来看)
【讨论】:
“只用新方法扩展核心类就可以了,还是有更好的方法?”
这个决定需要权衡取舍。事实上,直到最近,Pharo 才有 String>>asUrl,当时是 it was removed as part of cleaning the system。一方面,某些人(参见 Kent Beck 的最佳实践)认为在不具有相似协议(语义相似)的对象之间具有转换方法是不好的风格。此外,这会导致膨胀的核心类(如 String 和 Object)。但是,在您自己的应用程序中,可能有充分的理由来平衡这些因素,并且由于您将其与您的应用程序一起打包,而不是与系统一起打包,所以请大胆尝试。
【讨论】:
在pharo 7中,*是禁止的。
一条消息告诉您必须勾选方法编辑窗格中的扩展复选框。
如果你这样做,你可以选择你的包裹。
【讨论】: