在Pharo Smalltalk中以编程方式创建和删除类
我试图从存储在JSON文件中的外部定义创建类。我可以通过以下消息轻松创建一个类:在Pharo Smalltalk中以编程方式创建和删除类,smalltalk,pharo,Smalltalk,Pharo,我试图从存储在JSON文件中的外部定义创建类。我可以通过以下消息轻松创建一个类: name := 'SomeNewClass' Object subclass: name asSymbol instanceVariableNames: '' classVariableNames: '' package: 'SomeNew-Package'. 这在第一次运行时效果很好,但是如果我再次运行代码,它就会失败,因为类已经存在。我一直在寻找,但我不知道如何检查类
name := 'SomeNewClass'
Object subclass: name asSymbol
instanceVariableNames: ''
classVariableNames: ''
package: 'SomeNew-Package'.
这在第一次运行时效果很好,但是如果我再次运行代码,它就会失败,因为类已经存在。我一直在寻找,但我不知道如何检查类是否存在,如果存在,如何删除它?要查看全局(类)是否存在,请尝试
Smalltalk IncludeKey:aSymbol
。要删除全局文件,请尝试Smalltalk removeKey:aSymbol
。(请注意,可能还有其他方法可以访问系统字典。上述代码来自内存,尚未尝试过。)您的代码不应失败。你看到的问题一定有不同的原因,让我解释一下原因
在(每种情况下)Smalltalk类都可以重新定义,以便修改它们。通常,您将从以下几行的简单方法开始:
Object subclass: #Volcano
instanceVariableNames: ''
classVariableNames: ''
package: 'SomeNew-Package'
添加一些方法和测试,然后意识到您需要一两个实例变量
Object subclass: #Volcano
instanceVariableNames: 'location active'
classVariableNames: ''
package: 'SomeNew-Package'
在执行此操作时,相同的类对象火山
将保持不变,并且您的实例(如果有)将获得两个新插槽(一个用于位置
,另一个用于活动
)
更一般地说,重新定义类的功能包括演化模型所需的所有操作:
- 添加/删除/重命名实例变量
- 添加/删除/重命名类变量
- 添加/删除/重命名类实例变量
- 更改超类
- 重命名该类
- 将类移动到另一个包
琐碎的注释:用于分隔两条语句的代码段中缺少一个点。应该是
name := 'SomeNewClass'. "<- dot added"
Object subclass: name asSymbol
instanceVariableNames: ''
classVariableNames: ''
package: 'SomeNew-Package'. "<- final dot is ok but not required"
try
catch
在smalltalk中不存在?@yadu,是的,语法为aBlock on:anException do:anotherBlock
。感谢您的详细回复。它确实帮助我理解smalltalk中发生的事情。我回到了代码,现在无法复制错误,所以我不确定发生了什么。
Object subclass: #SomeNewClass
instanceVariableNames: ''
classVariableNames: ''
package: 'SomeNew-Package'