2012-03-22 125 views
0

我有一個方法來計算指數,但它不喜歡c:= c * a。如果我做類似c:= a的事情。它的工作原理和我不確定爲什麼它的行爲,當我嘗試和做c:= c * a .. Im新到Smalltalk,所以也許它只是我失蹤的東西。我使用Pharo作爲我的工具。問題for循環在smalltalk

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. 
+3

由於c未初始化,編譯器不會「喜歡」c:= c * a'。在不知道c的值的情況下,您無法計算* c次a *。 – 2012-03-22 03:58:06

+0

感謝它的工作!發佈它作爲答案,所以我可以接受它。 – jfisk 2012-03-22 04:01:33

+1

也注意到你不需要額外的局部變量a和b,你可以只使用參數i1和i2 – 2012-03-22 13:04:51

回答

4

您需要在使用前初始化c。隨您的聲明:

c := a 

它的工作原理是因爲a有一個值。附:

c := c * a 

它不會工作,因爲第一次循環,c不會被初始化到任何有用的東西。

只要改變你的初始化部分:

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

在樣品C指向零,因爲C沒有初始化。而零(這是一個對象)不理解消息*。拋出異常時查看調試器中的值。