2014-04-08 58 views
1

Runnable on playground在golang

type Boolean bool 

func takes_bool(b bool) { 
    fmt.Printf("%t\n", b) 
} 

func takes_boolean(b Boolean) { 
    fmt.Printf("%t\n", b) 
} 

的可轉讓的功能參數。當我調用以下:

takes_bool(Boolean(false)) 
takes_bool(Boolean(true)) 

我得到:

cannot use Boolean(false) (type Boolean) as type bool in function argument 
cannot use Boolean(true) (type Boolean) as type bool in function argument 

上可轉讓的規則似乎不允許即至少有一個不是的命名類型都具有相同的基本類型:

type Boolean bool 

vs 

bool 

回答

2

http://golang.org/ref/spec#Types仔細閱讀似乎bool被認爲是一個命名的類型(如爲intfloat和朋友)。短語「未命名類型」僅指類型文字,如interface{}struct{}

+0

函數'takes_boolean'既可以接受'true'也可以接受'false'。所以現在你有兩個命名類型。 – canadadry

+1

'bool'和'Boolean'都是命名類型。然而,裸字'true'和'false'是無類型的常量字面值,屬於http://golang.org/ref/spec#Assignability中的最後一個要點。另請參見http://golang.org/ref/spec#Constants – Evan