我有一种计算指数的方法,但它不喜欢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.
答案 0 :(得分:4)
在使用之前,您需要初始化c
。声明:
c := a
它有效,因为a
有一个值。用:
c := c * a
它不起作用,因为第一次循环,c
将不会被初始化为任何有用的东西。
只需将初始化部分更改为:
a := i1.
b := i2.
c := 1.
答案 1 :(得分:1)
在示例中,c指向nil,因为c未初始化。而nil(这是一个对象)不理解消息*。抛出异常时查看调试器中的值。