проблема с циклом for в smalltalk - PullRequest
0 голосов
/ 22 марта 2012

У меня есть метод для вычисления показателя степени, но он не похож на 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 ]

4 голосов
/ 22 марта 2012

Вам необходимо инициализировать c перед использованием.С вашим утверждением:

c := a

это работает, потому что a имеет значение.С помощью:

c := c * a

это не будет работать, потому что в первый раз в цикле c не будет инициализироваться чем-либо полезным.

Просто измените ваш раздел инициализации на:

a := i1.
b := i2.
c := 1.
1 голос
/ 21 мая 2012

В примере c указывает на ноль, потому что c не был инициализирован.И ноль (который является объектом) не понимает сообщение *.Посмотрите значения в отладчике при возникновении исключения.

...