1. ホーム
  2. function

[解決済み] Goでネストした関数宣言を許可しないことで軽減される問題は何ですか?

2022-10-06 15:11:10

質問

ラムダは期待通りに動作します。

func main() {
    inc := func(x int) int { return x+1; }
}

ただし、宣言の中に次のような宣言をすることは許されません。

func main() {
    func inc(x int) int { return x+1; }
}

ネストされた関数が許されない理由は何ですか?

どのように解決するのですか?

この明らかな機能が許可されていない理由は3つあると思います。

  1. コンパイラを少し複雑にするでしょう。 今のところ、コンパイラはすべての関数がトップレベルにあることを知っています。
  2. 何かをリファクタリングして、誤っていくつかの関数をネストしてしまうというような、新しいクラスのプログラマエラーが発生するでしょう。
  3. 関数とクロージャのために異なる構文を持つことは、良いことです。 クロージャを作ることは、関数を作ることよりも潜在的に高価なので、それを行っていることを知るべきです。

これらは私の意見であり、言語設計者からの公式な発表を見たわけではありません。