Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Class 如何将对象的类设置为其他对象?_Class_Metaprogramming_Smalltalk_Pharo - Fatal编程技术网

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的要求做。