我怎么能在方法词典中添加方法

时间:2017-12-20 15:24:54

标签: smalltalk squeak

我尝试在运行时添加一个从自我方法Dictionary到另一个对象方法Dictionary的方法,但我没有成功,我试图这样做:

(self methodDict keys) do:[:funDec| 
MyObject methodDict at: funDec put: (self methodDic at: funDec).].

如何以正确的方式将方法Dictionary中的方法添加到anothor中?

1 个答案:

答案 0 :(得分:1)

这实际上是一个很好的练习,学习一切都是smalltalk中的对象:) methodDictionary中的方法只是CompiledMethods的实例,可以在很多方面使用..即在运行时操作类,一种反思性编程方式

至于您的问题,您的代码中只有一个小错误。而不是使用methodDict使用methodDictionary访问器,那么它应该工作正常。不应直接访问methodDict。

这是一个可以在你的pharo图像中执行的小游乐场。只需将ClassA和B替换为各自的ClassA和B.之后,您将看到复制的方法将在浏览ClassB时保持不变并保持可见。

"list methods of ClassA and ClassB"
Transcript open; clear.
Transcript show: '**ClassA methodDictionary:', String crlf.
ClassA methodDictionary associationsDo:
    [:assoc | Transcript show: assoc value asString, String crlf].
Transcript show: '**ClassB methodDictionary (Before):', String crlf.
ClassB methodDictionary associationsDo:
    [:assoc | Transcript show: assoc value asString, String crlf].

"Transfer all methods of ClassA to ClassB"
ClassA methodDictionary associationsDo:
    [:assoc | ClassB methodDictionary at: assoc key put: assoc value].

"again .. list methods of ClassB"
Transcript show: '**ClassB methodDictionary (After):', String crlf.
ClassB methodDictionary associationsDo:
    [:assoc | Transcript show: assoc value asString, String crlf].