回到简体

This commit is contained in:
chai2010
2016-02-15 11:06:34 +08:00
parent 9e878f9944
commit 2b37b23285
177 changed files with 2354 additions and 2354 deletions

View File

@@ -1,6 +1,6 @@
## 6.4. 方法值和方法表
## 6.4. 方法值和方法表
們經常選擇一個方法,且在同一個表達式里行,比如常的p.Distance()形式,實際上將其分成兩步來執行也是可能的。p.Distance叫作“選擇器”,選擇器會返迴一個方法"值"->一個將方法(Point.Distance)定到特定接收器量的函數。這個函數可以不通指定其接收器可被調用;卽調用時不需要指定接收器(譯註:因爲已經在前文中指定了)隻要傳入函數的參數卽可:
们经常选择一个方法,且在同一个表达式里行,比如常的p.Distance()形式,实际上将其分成两步来执行也是可能的。p.Distance叫作“选择器”,选择器会返回一个方法"值"->一个将方法(Point.Distance)定到特定接收器量的函数。这个函数可以不通指定其接收器可被用;即调用时不需要指定接收器(译注:因为已经在前文中指定了)只要传入函数的参数即可:
```go
p := Point{1, 2}
@@ -17,7 +17,7 @@ scaleP(3) // then (6, 12)
scaleP(10) // then (60, 120)
```
在一包的API需要一個函數值、且調用方希望操作的是某一個綁定了象的方法的,方法"值"非常用(=_=眞是繞)。舉例來説下面例子中的time.AfterFunc這個函數的功能是在指定的延遲時間之後來執行一個(譯註:另外的)函。且這個函數操作的是一Rocket象r
在一包的API需要一个函数值、且用方希望操作的是某一个绑定了象的方法的,方法"值"非常用(=_=真是绕)。举例来说下面例子中的time.AfterFunc这个函数的功能是在指定的延迟时间之后来执行一个(译注:另外的)函。且这个函数操作的是一Rocket象r
```go
type Rocket struct { /* ... */ }
@@ -26,17 +26,17 @@ r := new(Rocket)
time.AfterFunc(10 * time.Second, func() { r.Launch() })
```
直接用方法"值"入AfterFunc的可以更爲簡短:
直接用方法"值"入AfterFunc的可以更为简短:
```go
time.AfterFunc(10 * time.Second, r.Launch)
```
譯註:省掉了上面那例子里的匿名函
译注:省掉了上面那例子里的匿名函
和方法"值"相關的還有方法表式。當調用一方法時,與調用一普通的函相比,我們必須要用選擇器(p.Distance)語法來指定方法的接收器。
和方法"值"相关的还有方法表式。当调用一方法时,与调用一普通的函相比,我们必须要用选择器(p.Distance)语法来指定方法的接收器。
T是一個類型時,方法表式可能會寫作T.f或者(*T).f會返迴一個函數"值",這種函數會將其第一個參數用作接收器,所以可以用通常(譯註:不寫選擇器)的方式來對其進行調用:
T是一个类型时,方法表式可能会写作T.f或者(*T).f会返回一个函数"值",这种函数会将其第一个参数用作接收器,所以可以用通常(译注:不写选择器)的方式来对其进行调用:
```go
p := Point{1, 2}
@@ -51,13 +51,13 @@ 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方法的參數
// 看起來本書中函和方法的别是指有有接收器,而不像其他言那是指有有返值。
// 译注:这个Distance实际上是指定了Point对象为接收器的一方法func (p Point) Distance()
// 但通Point.Distance得到的函需要比实际的Distance方法多一个参数
// 其需要用第一个额外参数指定接收器,面排列Distance方法的参数
// 看起来本书中函和方法的别是指有有接收器,而不像其他言那是指有有返值。
```
你根據一個變量來決定調用同一個類型的哪個函數時,方法表式就得很有用了。你可以根據選擇來調用接收器各不相同的方法。下面的例子,量op代表Point型的addition或者subtraction方法Path.TranslateBy方法會爲其Path數組中的每一Point來調用對應的方法:
你根据一个变量来决定调用同一个类型的哪个函数时,方法表式就得很有用了。你可以根据选择来调用接收器各不相同的方法。下面的例子,量op代表Point型的addition或者subtraction方法Path.TranslateBy方法会为其Path数组中的每一Point来调用对应的方法:
```go
type Point struct{ X, Y float64 }