2015-03-26 9 views
11

Odczyt kodu źródłowego math/floor.go, starting from line 13, czytałem trochę kodu:Bezcielesnego funkcja w Golang

func Floor(x float64) float64 

func floor(x float64) float64 { 
    if x == 0 || IsNaN(x) || IsInf(x, 0) { 
     return x 
    } 
    if x < 0 { 
     d, fract := Modf(-x) 
     if fract != 0.0 { 
      d = d + 1 
     } 
     return -d 
    } 
    d, _ := Modf(x) 
    return d 
} 

Wydaje się func Floor ma ciało. Próbowałem skopiować i wkleić ten kod w moim pliku. to się nie kompiluje. Komunikat o błędzie to missing function body. Moje pytanie brzmi: czy funkcja pozbawiona cielesności jest legalna w składni Go? Dzięki.

Odpowiedz

12

Jest to sposób implementacji funkcji podczas montażu. Znajdziesz implementację złożenia w plikach floor_ARCH.s (np .: AMD64).

Cytując spec: oświadczenie

funkcja może pominąć ciało. Taka deklaracja zapewnia podpis dla funkcji zaimplementowanej poza Go, takiej jak procedura składania.

+2

Jakie jest znaczenie implementacji funkcji "floor (x ...)' (małe litery)? W jaki sposób odnosi się do implementacji złożenia? – maerics

+4

@maerics Wierzę, że jest to awaryjna implementacja Go, używana na przykład przez [floor_arm.s] (https://github.com/golang/go/blob/master/src/math/floor_arm.s#L8). Takie rzeczy mogłyby ewentualnie zostać wykonane w celach referencyjnych lub do wykorzystania w testach, aby sprawdzić inne implementacje. (Go sam w sobie nie oznacza żadnego związku między 'Floor' i' flooridentami '). –

+2

@DaveC Dzięki za cytat. Dodałem go do odpowiedzi. – inf