Go
1package main 2 3import "fmt" 4 5type ProductCode int 6 7const Btcjpy ProductCode = 0 8const Ethjpy ProductCode = 1 9 10func (code ProductCode) String() string { 11 switch code { 12 case Btcjpy: 13 return "BTC_JPY" 14 case Ethjpy: 15 return "ETH_JPY" 16 default: 17 return "BTC_JPY" 18 } 19} 20func main() { 21 code := Btcjpy.String() 22 fmt.Println(code) 23}
上記の様なコードがあります。
分からないこと
main関数でBtcjpy.String()とすると
const Btcjpy ProductCode = 0 なので、0.String()と同義だと思います。
その後、Stringメソッドを呼び出すのでレシーバーのcodeには0が入ると思います。
その後にSwitchでcodeがBtcjpyならBTC_JPYを返すと書いてあります。
ただここでレシーバー(code)には0が入っているのに、
なぜcase Btcjpy: と出来るのか謎です。
僕が思うのは結果としては間違えているのは分かっているのですが、
Go
1func (code ProductCode) String() string { 2 switch code { 3 case 0: 4 return "BTC_JPY" 5 case 1: 6 return "ETH_JPY" 7 default: 8 return "BTC_JPY" 9 } 10}
なら辻褄が合うと思って仕方がありません。
僕が理解できてないところ、解決していただけないでしょうか。
何か基礎的な文法の知識が欠落してる可能性、勘違いしている可能性もあります。
宜しくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。