Smalltalk 如何将方法添加到方法字典

Smalltalk 如何将方法添加到方法字典,smalltalk,squeak,Smalltalk,Squeak,在运行时,我尝试将一个方法从self method Dictionary添加到另一个object method Dictionary,但没有成功,我尝试执行以下操作: (self methodDict keys) do:[:funDec| MyObject methodDict at: funDec put: (self methodDic at: funDec).]. 如何以正确的方式将方法从方法字典添加到其他方法?这实际上是学习smalltalk中的一切都是对象的一个很好的练习:)方法字

在运行时,我尝试将一个方法从self method Dictionary添加到另一个object method Dictionary,但没有成功,我尝试执行以下操作:

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

如何以正确的方式将方法从方法字典添加到其他方法?

这实际上是学习smalltalk中的一切都是对象的一个很好的练习:)方法字典中的方法只是编译方法的实例,可以以多种方式使用。。i、 e.在运行时操作类,这是一种反射式编程方法

至于你的问题,你的代码中只有一个小错误。不要使用methodDict,而是使用methodDictionary访问器,这样它就可以正常工作了。methodDict不应直接访问

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

“但我没有成功”。。。。到底出了什么问题?错误消息?错误的结果?你说这是什么意思?您使用的是实例方法吗?课堂教学法?你也有错误。没有
methodDic
选择器。我收到错误消息=>“错误:primSize:失败”。我试图在他的类MethodDictionary中添加一个实例方法。请解释一下为什么您试图以这种不同寻常的方式添加方法,以便我们更好地理解您试图实现的目标。我不想重复太多,但请再说一遍,您在什么上下文中调用它?我投票决定结束这个问题,因为没有足够的代码来正确地再现这个问题。您还需要编辑您的问题并指出您在其中遇到的错误,而不仅仅是将其添加为其他读者看不到的注释。
primSize:
是类
StandardFileStream
中的一个方法,它应该返回文件的大小。计算代码片段时,此代码片段将写入与图像文件关联的更改日志文件(以
.changes
结尾的文件)。您是否可能没有对
.changes
文件的读取权限?当您评估像
3+4
这样的简单代码段时会发生什么?