这个函数初始化语法是什么意思?

时间:2014-01-28 19:46:53

标签: go

在查看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?我不明智!

感谢。

1 个答案:

答案 0 :(得分:4)

Go spec: Conversions

  

转换是T(x)形式的表达式,其中T是一个类型,x是可以转换为T类型的表达式。

所以,

fn := FuncType(MultiplyByThree)

FuncType是一种类型。 MultiplyByThree是指向函数(表达式)的指针,其签名与FuncType相同。因此,它可以转换为这种类型。

顺便说一句,输出略有错误。应该是

  

返回5 * 3 * 2:30

这是正确的乘法序列。 :)