我尝试在运行时添加一个从自我方法Dictionary到另一个对象方法Dictionary的方法,但我没有成功,我试图这样做:
(self methodDict keys) do:[:funDec|
MyObject methodDict at: funDec put: (self methodDic at: funDec).].
如何以正确的方式将方法Dictionary中的方法添加到anothor中?
答案 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].