我有一个计算指数的方法,但它不喜欢c:=c*a。如果我做类似c:=a的事情,它会起作用,我不确定为什么当我尝试做c:=c*a时它会这样。。我是Smalltalk的新手,所以也许这只是我缺少的东西。我用Pharo作为我的工具。
testPow: i1 exp: i2
"Testing exponent. i1 and i2 are integers, we calculate and then return the value as a Church numeral"
| a b c |
a := i1.
b := i2.
1 to: b do: [ :i |
c:= c*a.
].
^c.
在使用c
之前,您需要初始化它
c := a
它工作是因为CCD_ 2具有值。带有:
c := c * a
它不会工作,因为第一次通过循环时,c
不会被初始化为任何有用的东西。
只需将初始化部分更改为:
a := i1.
b := i2.
c := 1.
在示例中,c指向nil,因为c未初始化。nil(它是一个对象)不理解消息*。当抛出异常时,查看调试器中的值。