問題タブ [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.
php - PHP でのネストされた関数の奇妙さ
なぜ
存在しない関数バーで致命的なエラーを返す
その間
bar() の重複宣言で致命的なエラーが発生しますか?
PHPは関数をグローバルまたは親の関数スコープで処理しますか?
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 ++を使用してこれをすぐに解決できることも認識していますが、それはここでの私の目標ではありません。
oracle - PLSQLでネストされた関数を使用する正しい方法は何ですか?
PLSQLでネストされた関数を使用する正しい方法を知りたい。次のスニペットでは、関数'to_number'は正常に機能しますが、2つのネストされた関数を同じ方法で使用することはできません。
c - C の移植可能な入れ子関数
ネストされた関数/ブロックを使用して移植可能な C コードを作成することは可能ですか?
gcc は非標準拡張機能としてネストされた関数のみをサポートし、clang はブロックのみをサポートすることを理解していますが、MACROS を使用して標準 C を使用して両方でコンパイルするコードを作成する方法はありますか?
それが不可能な場合、最善の回避策は何ですか? 例として、次のようなパラメーターを受け取る移植可能なバージョンをどのように実装しますか? GCC での簡単な例:
同様の例は、Clang の Blocks を使用してまとめることができます。理想的には、ソリューションはスレッドセーフであるべきです (そのため、グローバル変数は避けてください)。
編集:明確にするために、「標準」はC99を意味すると仮定しましょう。上記は些細な例です。私が求めているのは、いくつかのパラメーターを必要とする並べ替えに対する C99 のアプローチです。ここではブール値として char を使用していますが、複数の整数などを取るソリューションを求めています。これは、グローバル変数なしでは不可能なようです。
編集 2:関数ポインターと共に void ポインターを渡すと、ネストされた関数で実行できるすべてのことを実行できることに気付きました。qsort_r
提案してくれた@Quuxplusoneに感謝しqsort_s
ます。と に移植可能なラッパーをまとめようとしましqsort_r
たqsort_s
。コンパレーター関数と状態を格納する void ポインターを使用するため、複雑な並べ替えアルゴリズムのネストされた関数への依存がなくなります。したがって、GCC と Clang の両方でコンパイルできます。
注: 多くのプラットフォームでこれをテストしていないため、バグが見つかった場合はお知らせください。お使いのマシンでは機能しません。
使用例として、選択した回答と同じ並べ替えを実装しました。
syntax - Clojure/Lisp マクロを使用して、このラムダ構文を実装できますか?
JavaScript では、次のようになります。
つまり、言い換えると、(Clojure の現在の実装とは異なり) ネストされた関数を許可するラムダの短い構文です。
python - 入れ子関数のローカル変数
さて、これについては我慢してください。ひどく複雑に見えることはわかっていますが、何が起こっているのかを理解するのを手伝ってください。
与える:
それで、基本的に、なぜ私は3つの異なる動物を手に入れないのですか?cage
ネストされた関数のローカルスコープに「パッケージ化」されていませんか?そうでない場合、ネストされた関数の呼び出しはどのようにローカル変数を検索しますか?
この種の問題に遭遇することは、通常、「間違ったことをしている」ことを意味することを私は知っていますが、何が起こるかを理解したいと思います。
extjs - ExtJSのネストされた関数でスコープを使用する方法
scope
入れ子関数での使用に問題があります。私のコードは以下にあり、エラーもコードに記載されています。scope
ネストされた関数に渡すにはどうすればよいですか?
python - ネストされた関数をどのように単体テストしますか?
次の例でネストされた関数をどのように単体テストf1()
しますか?
または、テストが必要な関数をネストしないでください。
javascript - 入れ子関数内から外部関数を呼び出すJavascript
私が考えたことを持っていることは、大きな痛みであることに対処するのに比較的簡単な問題であるべきです...私はやろうとしています:
これに対する私のアプローチは、次のことを試みることでした。
上記の問題は、前者が機能している間(エラーが発生したときに処理しなかったことを除く)、後者はログメッセージを出力しないことです...「theWholeThing()」呼び出しが思ったように機能していないかのように(もう一度全部を呼び出します)。
ここに微妙に何かが間違っているに違いありません、何かヒントはありますか?
ありがとう!
javascript - JS: ネストされた関数は、外側の関数のパラメーターのコピーを取得しますか?
したがって、次のコードを使用して、ネストされた関数が実際に外側の関数のパラメーターのコピーを取得することを自分自身に証明しました。
コードは
これは、o.f
関数が無名関数から a、b、および c のコピーを取得することを意味します。そうでなければ、私はただ得るでしょうundefinedundefinedundefined
私の質問は、
- まず、これは常に真実ですか?または厳しい状況がありますか?(のように、それはオブジェクトである必要がありますか?など)
- また、javascript には、このような他の種類のあいまいなスコープが存在しますか? 知りたいです(つまり、3回目の反復はどうですか?)
- 最後に、javascript スコープに関する高度な概念を説明するドキュメントを読んでもまったく問題ありません。誰か良いものを知っていますか?