smalltalk中for循环的问题



我有一个计算指数的方法,但它不喜欢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(它是一个对象)不理解消息*。当抛出异常时,查看调试器中的值。

最新更新