Class 如何将对象的类设置为其他对象?
我最近看到了这个,现在我找不到了 如何将对象的类设置为其他对象 --更新:嗯,在法罗!比如:Class 如何将对象的类设置为其他对象?,class,metaprogramming,smalltalk,pharo,Class,Metaprogramming,Smalltalk,Pharo,我最近看到了这个,现在我找不到了 如何将对象的类设置为其他对象 --更新:嗯,在法罗!比如: d:=Object new. d setClass: Dictionary. 只是它实际上不是setClass。如何修改对象的类指针?方法#setClass:用于某些特定上下文和不同的实现(使用方法查找器进行检查) 对象有一些帮助程序以其他形式转换当前对象,例如#asOrderedCollection,因为这最后一个允许操作: asOrderedCollection "Answer an Or
d:=Object new. d setClass: Dictionary.
只是它实际上不是setClass。如何修改对象的类指针?方法#setClass:用于某些特定上下文和不同的实现(使用方法查找器进行检查)
对象有一些帮助程序以其他形式转换当前对象,例如#asOrderedCollection,因为这最后一个允许操作:
asOrderedCollection
"Answer an OrderedCollection with the receiver as its only element."
^ OrderedCollection with: self
HTH.好的,那么您可以尝试以下方法:
d := Object new.
e := Dictionary new.
d become: e.
但是,请谨慎地尝试“变成”:因为在很多情况下,它会破坏图像。有#primitiveChangeClassTo:
它要求原始类和目标类具有相同的类布局。出于某种奇怪的原因,它期望目标类的一个实例作为参数,但并没有使用它
你会这么做吗
d := Object new.
d primitiveChangeClassTo: Dictionary new.
但是这失败了,因为字典有两个实例变量,而普通对象没有
如果您对元编程感兴趣,您可能还对将任何对象用作类感兴趣。我在中使用它来实现一种直接在Smalltalk之上工作的基于原型的语言。看看类生成器。当您修改一个类时,它会创建一个新类,然后将前者的实例切换到后者的实例。因此,它应该提供一些方法,可以满足您的要求 嗯。。。你能再详细一点吗?这确实很有帮助,但我真的想更改对象的类指针。假设另一个类具有相同的布局(相同的inst变量,不可索引),这应该是可能的,不是吗?变成:很酷/怪异/有趣。但它没有按照OP的要求做。