Object 为什么这个类/实例变量没有被初始化?
我正在尝试使用gnu smalltalk。在以下带有变量的简单类的代码中,我发现它没有初始化为给定值:Object 为什么这个类/实例变量没有被初始化?,object,smalltalk,gnu-smalltalk,Object,Smalltalk,Gnu Smalltalk,我正在尝试使用gnu smalltalk。在以下带有变量的简单类的代码中,我发现它没有初始化为给定值: Object subclass: Myclass[ |mainval| mainval := 555. getmainval [^mainval] ] gc := Myclass new. gc getmainval printNl. 创建对象时没有任何错误。但是,结果是: nil 而我原以为是555 如果我添加一个方法给它赋值,并在创建类的实例后调用它,它就会工
Object subclass: Myclass[
|mainval|
mainval := 555.
getmainval [^mainval]
]
gc := Myclass new.
gc getmainval printNl.
创建对象时没有任何错误。但是,结果是:
nil
而我原以为是555
如果我添加一个方法给它赋值,并在创建类的实例后调用它,它就会工作
问题在哪里?如何纠正?谢谢。我想您已经很接近了,但是您尝试了一个快捷方式,但它不起作用,因为您希望在类定义内(在方法和本地有效性之外)将值设置为实例变量将返回值。实际上,您希望在方法中使用实例变量,例如
init
来表示对象的内部状态
正如我在之前的一些回答中指出的,我不是GNU Smalltalk专家。我正在使用Smalltalk/X-jv分支进行编程
我已冒昧地将您的代码重写为更多类似GNU Smalltalk的代码:
Object subclass: MyClass [
| mainVal |
<comment:
'testing main value'>
MyClass class >> new [
<category: 'instance creation'>
| myClass |
myClass := super new.
myClass init.
^ myClass
]
init [
<category: 'initialization'>
mainVal := 555.
]
mainVal [
^ mainVal
]
]
最小示例不带新的
消息重新定义:
Object subclass: MyClass [
| mainVal |
<comment:
'testing main value'>
init [
<category: 'initialization'>
mainVal := 555.
]
mainVal [
^ mainVal
]
]
解释得很好。
Object subclass: MyClass [
| mainVal |
<comment:
'testing main value'>
init [
<category: 'initialization'>
mainVal := 555.
]
mainVal [
^ mainVal
]
]
gc := MyClass new.
a MyClass
st> gc init
a MyClass
st> gc mainVal
555