Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.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
带参数的smalltalk方法调用_Smalltalk - Fatal编程技术网

带参数的smalltalk方法调用

带参数的smalltalk方法调用,smalltalk,Smalltalk,我在smalltalk中编写了以下方法: initializeWithStart: startWith step: theStep count: theCount self initialize. startNumber := startWith. stepSize := theStep. countUntil := theCount. 我只想在从工作区创建一个对象之后调用这个方法。于是我写道: mySq := ArithmeticsS new. mySq initializeWithSta

我在smalltalk中编写了以下方法:

initializeWithStart: startWith step: theStep count: theCount

self initialize.
startNumber := startWith.
stepSize := theStep.
countUntil := theCount.
我只想在从工作区创建一个对象之后调用这个方法。于是我写道:

mySq := ArithmeticsS new.
mySq initializeWithStart: '2' step:'4' count:'10'.

为什么会出现错误“MessageNotUnderstanding:undefinedobject>>initializeWithStart:step:count:”?

如果没有更多上下文,我们无法确定,但看起来您是在类端而不是实例端创建了新方法

在工作区中,您选择将消息发送到实例

查找、评估(打印)

如果该方法位于类端,则为真。删除该方法并将其保存在实例端

现在评估

ArithmeticsS new respondsTo: #initializeWithStart:step:count:
使用
new
,这将检查实例端的方法应该是真的。根据您发布的信息,我猜它是假的,这意味着您没有将该方法保存在正确的位置


查看您的Smalltalk方言文档,以确认如何保存实例方法。

您应该这样实例化:

mySq := ArithmeticsS new initializeWithStart: 2 step:4 count:10.

看起来像是
arithmaticsnew
返回
nil
。什么是算术的超类?您是否在算术中重写了
new
,我们可能需要更多的上下文,如@Uko saysAlso,您确定您执行了这两行吗?一种可能是选择两行,然后“执行”它们(从关联菜单或通过键盘快捷键),或者逐行“执行”它们“第一行,查看您分配给变量的内容。另外,是否存在算术类的initialize实例方法定义?如果您同时执行了这两个语句并出现错误,则initialize方法返回nil(no^与initializeWithStart:step:count类似,它也返回nil)
mySq := ArithmeticsS new initializeWithStart: 2 step:4 count:10.