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