向类添加/覆盖/编辑主体方法 (Smalltalk - Squeak)

发布于 2024-11-04 09:10:17 字数 451 浏览 4 评论 0原文

如何为特定类添加新方法删除方法?或者,如果我尝试添加一种已经存在的方法,那么它将覆盖它(尽管在这种情况下,我可以删除旧的方法并添加相同的新方法)?

当方法本身表示为字符串时可以这样做吗? (我的意思是在不使用外部文件等的情况下执行此操作,而只是将方法写为字符串)。

例如,一个方法获取一个类、一个符号和一个字符串(该方法的代码),并将该方法添加到 aClass 中,如果存在,则覆盖旧的方法:

in: aClass add: aSymbol sourceCode: aString

和用法示例:

in: ClassA add: #something sourceCode: 'self subclassResponsibility'

How can I add new methods or remove methods of a specific Class? Or, if I try to add a method which already exists so it will override it (although at this case I can just remove the old one and add the new one which is the same)?

Can it be done when the method itself is represented as a String? (I mean doing it without using external files and such but just have the method written as string).

For example a method that gets a class, a symbol and a string that is the code of the method and adds this method to aClass and if exists so override the old one:

in: aClass add: aSymbol sourceCode: aString

and usage example:

in: ClassA add: #something sourceCode: 'self subclassResponsibility'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

后来的我们 2024-11-11 09:10:17

这很容易。检查行为类中的“编译”类别。您可以执行以下操作:

 MyClass compile: 'something
   ^ self subclassResponsability'.

检查“编译”类别中的其余方法,您可以在其中指定将该方法放入哪个类别、通知谁、错误块等。如果您使用方法调用 #compile:存在的,它只会覆盖它。

对于删除,同样,检查类似#removeSelector:在Behaviour或ClassDescription中实现的方法。你可以这样做:

 MyClass removeSelector: something.

干杯

It is quite easy. Check the category 'compiling' in Behavior class. You can do things like:

 MyClass compile: 'something
   ^ self subclassResponsability'.

Check the rest of the methods in the 'compiling' category where you can specify in which category to put the method, to whom to notify, an error block, etc. If you call #compile: with a method that exist, it will just overwrite it.

For removing, the same, check methods like #removeSelector: implemented in Behavior or ClassDescription. You can do:

 MyClass removeSelector: something.

Cheers

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文