最近看到了,现在找不到了。。。
您如何将对象的类设置为其他对象?
--更新:嗯,在法罗!喜欢:
d:=Object new. d setClass: Dictionary.
只是它实际上不是 setClass。如何修改对象的类指针?
最近看到了,现在找不到了。。。
您如何将对象的类设置为其他对象?
--更新:嗯,在法罗!喜欢:
d:=Object new. d setClass: Dictionary.
只是它实际上不是 setClass。如何修改对象的类指针?
有#primitiveChangeClassTo:
。
它要求原始类和目标类具有相同的类布局。出于某种奇怪的原因,它期望目标类的实例作为参数,但是没有使用。
所以你会做
d := Object new.
d primitiveChangeClassTo: Dictionary new.
但是这失败了,因为字典有两个实例变量,但普通对象没有。
如果您喜欢元编程,您可能还会对使用任何对象作为类感兴趣。我在Protalk中使用它来实现一种直接在 Smalltalk 之上工作的基于原型的语言。
看看 Class ClassBuilder。当您修改一个类时,它会创建一个新类,然后将前者的实例切换到后者的实例。因此,它应该提供一些可以满足您要求的方法。
#setClass: 方法用于某些特定的上下文和不同的实现(使用方法查找器检查它)。
Object 有一些助手可以将当前对象转换为其他类型,例如#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.
但是,请谨慎尝试#become:,因为在很多情况下它会破坏形象。