2014-01-28 58 views
3

在看去google plus sign in,我發現了一個非常有趣的模式。這是一個簡單的例子(live)。這個函數的初始化語法是什麼意思?

package main 

import(
    "fmt" 
) 

type FuncType func(i int) int 

func (fn FuncType) MultiplyByTwo(i int) int{ 
    return fn(i) * 2 
} 

func MultiplyByThree(i int) int{ 
    return i * 3 
} 


func main(){ 
    fn := FuncType(MultiplyByThree) 
    fmt.Println("returns 2 * 3 * 5: ",fn.MultiplyByTwo(5)) 
} 

我的問題很簡單,我們怎麼才能用圓括號啓動FuncType?我不明白!

謝謝。

回答

4

Go spec: Conversions

轉化是形式爲T的表達式(x),其中T是一個類型,並且x是可轉換爲類型T.

所以,

表達
fn := FuncType(MultiplyByThree) 

FuncType是一種類型。而MultiplyByThree是一個指向函數(這是一個表達式)的指針,它具有與FuncType相同的簽名。因此,它可以轉換爲這種類型。

順便說一句,輸出有點不對。應該是

返回5 * 3 * 2:30

這是乘法運算的正確的序列。 :)

+0

簡單的時候解釋!謝謝! – user983716