在smalltalk中使用for循环的问题

时间:2012-03-22 03:30:54

标签: smalltalk pharo

我有一种计算指数的方法,但它不喜欢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.

2 个答案:

答案 0 :(得分:4)

在使用之前,您需要初始化c。声明:

c := a

它有效,因为a有一个值。用:

c := c * a

它不起作用,因为第一次循环,c将不会被初始化为任何有用的东西。

只需将初始化部分更改为:

a := i1.
b := i2.
c := 1.

答案 1 :(得分:1)

在示例中,c指向nil,因为c未初始化。而nil(这是一个对象)不理解消息*。抛出异常时查看调试器中的值。