前提・実現したいこと
GO言語を使ったWEBアプリケーションの作成方法を本で勉強しています。
GO言語の関数チェインのやり方で疑問を感じたので教えていただけると助かります。
理解を深めるため、これを参考に自分で簡単なコードを書きました。
発生している問題・エラーメッセージ
sample1はうまく動作しますが、sample2は以下のエラーが出ます。
sample1
1F type is called 25 36
sample2
1prog.go:19:7: undefined: i 2prog.go:23:10: log(hello) used as value
もともとは、sample1のlogという関数で、なんでわざわざ関数型を受け取って関数型を返しているのか疑問に思い、どうせならlog関数の中でhello関数を呼び出せばいいじゃん!と思いsample2を作成しました。
1行目のエラーは引数が引き継げてないのでわかるのですが、2行目のエラーがなぜ起こるのかがわかりません。どなたか教えてくださると幸いです。
該当のソースコード
sample1
1package main 2 3import "fmt" 4 5 6type F func(i int) 7 8func (f F) serveInt(i int){ 9 fmt.Println("F type is called") 10 f(i) 11} 12 13func hello(i int){ 14 fmt.Println(i+1) 15} 16 17func log(h F) F{ 18 return func(i int) { 19 fmt.Println(i) 20 h(i) 21 } 22} 23 24func main() { 25 F(log(hello)).serveInt(5) 26}
sample2
1package main 2 3import "fmt" 4 5 6type F func(i int) 7 8func (f F) serveInt(i int){ 9 fmt.Println("F type is called") 10 f(i) 11} 12 13func hello(i int){ 14 fmt.Println(i+1) 15} 16 17func log(h F) { 18 fmt.Println("log") 19 h(i) 20} 21 22func main() { 23 F(log(hello)).serveInt(5) 24}
試したこと
無名関数、関数チェインなど1日中調べていましたが、同じような事例が見つかりませんでした。
補足情報(FW/ツールのバージョンなど)
以上のコードはGOの公式サイトで実行しました。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/04/22 15:01
2019/04/23 00:30 編集
2019/04/24 06:11