問題タブ [nested-function]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
4 に答える
118 参照

php - PHP でのネストされた関数の奇妙さ

重複の可能性:
外部関数が複数回呼び出されると、php のネストされた関数が例外をスローする

なぜ

存在しない関数バーで致命的なエラーを返す

その間

bar() の重複宣言で致命的なエラーが発生しますか?

PHPは関数をグローバルまたは親の関数スコープで処理しますか?

0 投票する
2 に答える
1496 参照

scope - Cプリプロセッサを使用して現在のスコープを決定しますか?

私はC/Objective-Cでアプリケーションを開発しています(C ++はありません、私はすでにそこに解決策を持っています)、そして私は興味深いユースケースに出くわしました。

clangはネストされた関数をサポートしていないため、私の元のアプローチは機能しません。

このコードはGCCで正常にコンパイルされますが、clangはネストされた関数をサポートしていないため、コンパイルエラーが発生します。

期待される ';' 宣言の終わりに。

だから、私は関数内の変数でClangのために働く解決策を見つけました:

ただし、マクロ連結を利用して、状況に適した連結を選択する方法があるかどうか疑問に思いました。たとえば、次のようになります。

明らかに、最終的な実装は正確にそれである必要はありませんが、同様のもので十分です。

で使用しようとしまし__builtin_constant_pたが、コンパイル時定数ではないため、機能しませんでした__func____func__

私も使用しようとし__builtin_choose_exprましたが、グローバルスコープでは機能しないようです。

ドキュメントに欠けているものは他にありますか?このようなことはかなり簡単なことのように思えますが、それでも私には理解できないようです。

注:マクロ連結を使用する代わりに、単純に入力できることは承知していますが、これはコンパイラーの限界を押し広げようとしている私CREATE_STATIC_VAR_GLOBALです。CREATE_STATIC_VAR_LOCALまた、C ++を使用してこれをすぐに解決できることも認識していますが、それはここでの私の目標ではありません。

0 投票する
1 に答える
6375 参照

oracle - PLSQLでネストされた関数を使用する正しい方法は何ですか?

PLSQLでネストされた関数を使用する正しい方法を知りたい。次のスニペットでは、関数'to_number'は正常に機能しますが、2つのネストされた関数を同じ方法で使用することはできません。

0 投票する
5 に答える
4073 参照

c - C の移植可能な入れ子関数

ネストされた関数/ブロックを使用して移植可能な C コードを作成することは可能ですか?

gcc は非標準拡張機能としてネストされた関数のみをサポートし、clang はブロックのみをサポートすることを理解していますが、MACROS を使用して標準 C を使用して両方でコンパイルするコードを作成する方法はありますか?

それが不可能な場合、最善の回避策は何ですか? 例として、次のようなパラメーターを受け取る移植可能なバージョンをどのように実装しますか? GCC での簡単な例:

同様の例は、Clang の Blocks を使用してまとめることができます。理想的には、ソリューションはスレッドセーフであるべきです (そのため、グローバル変数は避けてください)。

編集:明確にするために、「標準」はC99を意味すると仮定しましょう。上記は些細な例です。私が求めているのは、いくつかのパラメーターを必要とする並べ替えに対する C99 のアプローチです。ここではブール値として char を使用していますが、複数の整数などを取るソリューションを求めています。これは、グローバル変数なしでは不可能なようです。

編集 2:関数ポインターと共に void ポインターを渡すと、ネストされた関数で実行できるすべてのことを実行できることに気付きました。qsort_r提案してくれた@Quuxplusoneに感謝しqsort_sます。と に移植可能なラッパーをまとめようとしましqsort_rqsort_s。コンパレーター関数と状態を格納する void ポインターを使用するため、複雑な並べ替えアルゴリズムのネストされた関数への依存がなくなります。したがって、GCC と Clang の両方でコンパイルできます。

注: 多くのプラットフォームでこれをテストしていないため、バグが見つかった場合はお知らせください。お使いのマシンでは機能しません。

使用例として、選択した回答と同じ並べ替えを実装しました。

0 投票する
3 に答える
316 参照

syntax - Clojure/Lisp マクロを使用して、このラムダ構文を実装できますか?

JavaScript では、次のようになります。

つまり、言い換えると、(Clojure の現在の実装とは異なり) ネストされた関数を許可するラムダの短い構文です。

0 投票する
4 に答える
13238 参照

python - 入れ子関数のローカル変数

さて、これについては我慢してください。ひどく複雑に見えることはわかっていますが、何が起こっているのかを理解するのを手伝ってください。

与える:

それで、基本的に、なぜ私は3つの異なる動物を手に入れないのですか?cageネストされた関数のローカルスコープに「パッケージ化」されていませんか?そうでない場合、ネストされた関数の呼び出しはどのようにローカル変数を検索しますか?

この種の問題に遭遇することは、通常、「間違ったことをしている」ことを意味することを私は知っていますが、何が起こるかを理解したいと思います。

0 投票する
2 に答える
3382 参照

extjs - ExtJSのネストされた関数でスコープを使用する方法

scope入れ子関数での使用に問題があります。私のコードは以下にあり、エラーもコードに記載されています。scopeネストされた関数に渡すにはどうすればよいですか?

0 投票する
3 に答える
16658 参照

python - ネストされた関数をどのように単体テストしますか?

次の例でネストされた関数をどのように単体テストf1()しますか?

または、テストが必要な関数をネストしないでください。

0 投票する
2 に答える
3496 参照

javascript - 入れ子関数内から外部関数を呼び出すJavascript

私が考えたことを持っていることは、大きな痛みであることに対処するのに比較的簡単な問題であるべきです...私はやろうとしています:

これに対する私のアプローチは、次のことを試みることでした。

上記の問題は、前者が機能している間(エラーが発生したときに処理しなかったことを除く)、後者はログメッセージを出力しないことです...「theWholeThing()」呼び出しが思ったように機能していないかのように(もう一度全部を呼び出します)。

ここに微妙に何かが間違っているに違いありません、何かヒントはありますか?

ありがとう!

0 投票する
4 に答える
12474 参照

javascript - JS: ネストされた関数は、外側の関数のパラメーターのコピーを取得しますか?

したがって、次のコードを使用して、ネストされた関数が実際に外側の関数のパラメーターのコピーを取得することを自分自身に証明しました。

コードは

これは、o.f関数が無名関数から a、b、および c のコピーを取得することを意味します。そうでなければ、私はただ得るでしょうundefinedundefinedundefined

私の質問は、

  • まず、これは常に真実ですか?または厳しい状況がありますか?(のように、それはオブジェクトである必要がありますか?など)
  • また、javascript には、このような他の種類のあいまいなスコープが存在しますか? 知りたいです(つまり、3回目の反復はどうですか?)
  • 最後に、javascript スコープに関する高度な概念を説明するドキュメントを読んでもまったく問題ありません。誰か良いものを知っていますか?