2013-08-14 13 views
9

Otrzymuję ten błąd, mówiąc, że nie używam zmiennej & hellip; ale do moich Noob oczy, wygląda jak ja:Learning Go - "zadeklarowany i nieużywany" Błąd

func Sqrt(x float64) float64 { 

    z := float64(x); 

    for i := 0; i < 10; i++ { 
     z := z - (z*z - x)/(2 * z); 
    } 

    return z; 
} 

Czy ktoś może wskazać, co mi brakuje o języku? Myślę, że ma to związek z = vs. := i określeniem zakresu, ale nie jestem pewien.

Odpowiedz

12

:= w twojej pętli for deklaruje nową zmienną z który cienie zewnętrzna z. Zmień go w zwykły =, aby rozwiązać problem.

func Sqrt(x float64) float64 { 

    z := x 

    for i := 0; i < 10; i++ { 
     z = z - (z*z - x)/(2 * z); 
    } 

    return z; 
} 

Nawiasem mówiąc, za taką samą precyzją i trochę większej prędkości można spróbować następujący implementacją, która dwa z twoich kroków na raz:

func Sqrt(x float64) float64 { 
    z := x 
    for i := 0; i < 5; i++ { 
     a := z + x/z 
     z = a/4 + x/a 
    } 
    return z 
} 
+0

Jaka jest różnica między '=' a ': =' w ogóle? – dubeegee

+4

'=' przypisuje wartość do istniejącej zmiennej, podczas gdy ': =' deklaruje nową zmienną i przypisuje jej wartość. Jeśli znasz C (lub przyjaciół), to jest to coś w rodzaju 'foo = 42' kontra' int foo = 42' –

+2

@dubeegee a = b oznacza "Niech wartość b". a: = b oznacza "Zadeklaruj zmienną a, która ma typ i wartość b". – fuz

4

Oto inny sposób spojrzeć na funkcję

func Sqrt(x float64) (z float64) { 
    z = x 
    for i := 0; i < 10; i++ { 
     z = z - (z*z - x)/(2*z); 
    } 
    return 
} 
Powiązane problemy