mirror of
https://github.com/gopl-zh/gopl-zh.github.com.git
synced 2025-08-15 02:51:34 +00:00
fmr code
This commit is contained in:
@@ -6,10 +6,11 @@
|
||||
p := Point{1, 2}
|
||||
q := Point{4, 6}
|
||||
|
||||
distanceFromP := p.Distance // method value
|
||||
fmt.Println(distanceFromP(q)) // "5"
|
||||
var origin Point // {0, 0}
|
||||
fmt.Println(distanceFromP(origin)) // "2.23606797749979", ;5
|
||||
distanceFromP := p.Distance // method value
|
||||
fmt.Println(distanceFromP(q)) // "5"
|
||||
var origin Point // {0, 0}
|
||||
fmt.Println(distanceFromP(origin)) // "2.23606797749979", sqrt(5)
|
||||
|
||||
scaleP := p.ScaleBy // method value
|
||||
scaleP(2) // p becomes (2, 4)
|
||||
scaleP(3) // then (6, 12)
|
||||
@@ -30,6 +31,7 @@ time.AfterFunc(10 * time.Second, func() { r.Launch() })
|
||||
```go
|
||||
time.AfterFunc(10 * time.Second, r.Launch)
|
||||
```
|
||||
|
||||
譯註:省掉了上面那個例子里的匿名函數。
|
||||
|
||||
和方法"值"相關的還有方法表達式。當調用一個方法時,與調用一個普通的函數相比,我們必鬚要用選擇器(p.Distance)語法來指定方法的接收器。
|
||||
@@ -41,7 +43,6 @@ p := Point{1, 2}
|
||||
q := Point{4, 6}
|
||||
|
||||
distance := Point.Distance // method expression
|
||||
//譯註:這個Distance實際上是指定了Point對象爲接收器的一個方法func (p Point) Distance(),但通過Point.Distance得到的函數需要比實際的Distance方法多一個參數,卽其需要用第一個額外參數指定接收器,後面排列Distance方法的參數。看起來本書中函數和方法的區别是指有沒有接收器,而不像其他語言那樣是指有沒有返迴值。
|
||||
fmt.Println(distance(p, q)) // "5"
|
||||
fmt.Printf("%T\n", distance) // "func(Point, Point) float64"
|
||||
|
||||
@@ -49,6 +50,11 @@ scale := (*Point).ScaleBy
|
||||
scale(&p, 2)
|
||||
fmt.Println(p) // "{2 4}"
|
||||
fmt.Printf("%T\n", scale) // "func(*Point, float64)"
|
||||
|
||||
// 譯註:這個Distance實際上是指定了Point對象爲接收器的一個方法func (p Point) Distance(),
|
||||
// 但通過Point.Distance得到的函數需要比實際的Distance方法多一個參數,
|
||||
// 卽其需要用第一個額外參數指定接收器,後面排列Distance方法的參數。
|
||||
// 看起來本書中函數和方法的區别是指有沒有接收器,而不像其他語言那樣是指有沒有返迴值。
|
||||
```
|
||||
|
||||
當你根據一個變量來決定調用同一個類型的哪個函數時,方法表達式就顯得很有用了。你可以根據選擇來調用接收器各不相同的方法。下面的例子,變量op代表Point類型的addition或者subtraction方法,Path.TranslateBy方法會爲其Path數組中的每一個Point來調用對應的方法:
|
||||
|
Reference in New Issue
Block a user