这段代码中的T是什么

Ogu*_*gic 4 go

在这段代码中真正的T是什么?递归减速?

package main

import "fmt"

type T func() T

func main() {
    var a T
    a = func() T {
        return a
    }

    fmt.Printf("%#v", a)
}
Run Code Online (Sandbox Code Playgroud)

http://play.golang.org/p/zt4CBXgrmI

编辑:我一直使用Go超过一年.

Gol*_*rol 9

它看起来像一个函数类型.在声明中,T是一个无参数函数,它返回一个T,所以函数返回一个函数.这是类型声明.a属于这种类型T.

a是一个返回自身的函数,所以这些行基本上都是一样的:

fmt.Printf("%#v", a)
fmt.Printf("%#v", a())
fmt.Printf("%#v", a()()()()())
Run Code Online (Sandbox Code Playgroud)

我不能想到这个有用,但话又说回来,我在Go中远没有经验.

  • 使用案例:Rob Pike在[他在Go中关于词汇扫描的讨论](http://www.youtube.com/watch?v=HxaD_trXwRE&feature=player_detailpage#t=846)中使用了它. (5认同)
  • 需要注意的是T不是一个返回自身的函数,它是一个返回T的函数.例如:http://play.golang.org/p/_MAiiMQH63 :) (2认同)