A Tour of Go42~54学習メモ
- Goの関数はクロージャ
- クロージャとはそれ自身の外部から変数を参照する関数の値
- 43での実装例はadder関数がクロージャを返していて、sum変数が関数に関連づけられて保持されている
- switch文でcaseの最後で自動的にbreakする
- breakせずに通したい場合はfallthrough文をcaseの最後に記述(defaultでは書かない)
- メソッドはレシーバ(structで定義される)と関連付けた関数
- 他のパッケージからの型や基本型にはメソッドが定義できない
- インターフェース型はメソッド群で定義される
- 54はおそらく明示的にどのインターフェースを持っているか書かなくて良くて定義されているインターフェースのように振る舞えるということ(Javaみたいにclassにimplementsしなくて良いみたいな?)
うーん。暗黙的なインターフェースのところが理解できてるか自信ないな。
A Tour of Go44の解答
package main import "fmt" // fibonacci is a function that returns // a function that returns an int. func fibonacci() func(i int) int { j, k := 0, 1 return func(i int) int { switch i { case 0: return 0 case 1: return 1 default: j, k = k, j + k return k } } } func main() { f := fibonacci() for i := 0; i < 10; i++ { fmt.Println(f(i)) } }
switch文使ったり、引数にループ変数渡したりしちゃいましたけど実装できました。