問題タブ [scoping]

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 投票する
3 に答える
219 参照

c++ - C ++での変数スコープの不適切なネスト?

次のようなコードがあります。

議論のために、のデフォルトコンストラクタComplexObjectはコストがかかると仮定します。

  • C ++コンパイラはcpyのデフォルトの構築/割り当てをコピーコンストラクタに置き換えることができますか(そしてできますか)?
  • 両方のローカルオブジェクトのスコープを維持しながら、その最適化を強制するようにコードを再構築する方法はありますか?

編集:私は、RAIIオブジェクトを他のものと不適切にネストしたいという問題の一般的な解決策を本当に探しています。

コンラッド・ルドルフの解決策についてのコメントはありますか?


編集2:

元のコードには次のシーケンスがあります。

  1. デフォルトの構成cpy
  2. RAIIを構築するlock
  3. 既存のオブジェクトをに割り当てる(コピーする)cpy
  4. 破壊するlock
  5. 使用するcpy
  6. 破壊するcpy

私が欲しいのは:

  1. RAIIを構築するlock
  2. コンストラクトcpy(この場合、既存のオブジェクトを使用したコピーコンストラクターによる)。
  3. 破壊するlock
  4. 使用するcpy
  5. 破壊するcpy
0 投票する
7 に答える
71706 参照

javascript - ブラウザ内のJavaScriptにはノードスタイルが必要ですか?

ノードと同じ柔軟性/モジュール性/使いやすさを提供するブラウザ内JavaScript用のライブラリはありますrequireか?

詳細を提供するために:理由requireはとても良いですそれはそれです:

  1. コードを他の場所から動的にロードできるようにします(これは、すべてのコードをHTMLでリンクするよりも、スタイル的に優れていると思います)。
  2. モジュールを構築するための一貫したインターフェースを提供します
  3. モジュールが他のモジュールに依存するのは簡単です(たとえば、jQueryを必要とするAPIを記述して、使用できるようにすることができます)jQuery.ajax()
  4. ロードされたjavascriptはスコープが設定されています。つまり、ロードvar dsp = require("dsp.js");でき、アクセスできるようになりますdsp.FFT。これにより、ローカルに干渉することはありません。var FFT

これを効果的に行うライブラリはまだ見つかりません。私がよく使用する回避策は次のとおりです。

  • coffeescript-concat-他のjsを要求するのは簡単ですが、コンパイルする必要があります。つまり、高速開発(テスト中のAPIの構築など)にはあまり適していません。

  • RequireJS-人気があり、わかりやすく、1〜3を解決しますが、スコープの欠如は本当に大きな問題です(head.jsは、スコープがないという点で似ていると思いますが、使用する機会はありませんでした。同様に、LABjsは依存関係の問題をロードして緩和できます.wait()が、それでもスコープは実行されません)

私の知る限り、JavaScriptの動的および/または非同期ロードには多くの解決策があるように見えますが、HTMLからjsをロードするのと同じスコープの問題が発生する傾向があります。何よりも、グローバル名前空間をまったく汚染しないが、ライブラリをロードして使用できるようにする(ノードの要求と同じように)javascriptをロードする方法が必要です。

2020年の更新: モジュールはES6で標準になり、2020年半ばの時点で、ほとんどのブラウザーでネイティブにサポートされています。モジュールは、同期と非同期(Promiseを使用)の両方のロードをサポートします。私の現在の推奨事項は、ほとんどの新しいプロジェクトでES6モジュールを使用し、トランスパイラーを使用してレガシーブラウザー用の単一のJSファイルにフォールバックすることです。

一般的な原則として、今日の帯域幅も通常、私が最初にこの質問をしたときよりもはるかに広くなっています。したがって、実際には、ES6モジュールで常にトランスパイラーを使用し、ネットワークではなくコード効率に注力することを合理的に選択する場合があります。

以前の編集(またはES6モジュールが気に入らない場合):これを書いた後、私はRequireJSを広範囲に使用しました(これにより、より明確なドキュメントが作成されました)。私の意見では、RequireJSは本当に正しい選択でした。私と同じように混乱している人々のためにシステムがどのように機能するかを明らかにしたいと思います。

require日常の開発にご利用いただけます。モジュールは、関数(通常はオブジェクトまたは関数)によって返されるものであれば何でもかまいません。スコープはパラメーターです。を使用してプロジェクトを単一のファイルにコンパイルしてデプロイすることもできます(実際には、スクリプトを並列にロードできますがr.js、これはほとんどの場合高速です)。require

RequireJSとnode-stylerequirelike browserify(tjamesonによって提案されたクールなプロジェクト)の使用の主な違いは、モジュールの設計と要件の方法です。

  • RequireJSはAMD(非同期モジュール定義)を使用します。AMDでは、requireロードするモジュール(javascriptファイル)のリストとコールバック関数を取ります。各モジュールをロードすると、コールバックのパラメーターとして各モジュールを使用してコールバックを呼び出します。したがって、これは真に非同期であるため、Webに最適です。
  • ノードはCommonJSを使用します。CommonJSではrequire、モジュールをロードしてオブジェクトとして返すブロッキング呼び出しです。これは、ファイルがファイルシステムから読み取られるため、ノードでは正常に機能します。これは十分に高速ですが、ファイルの同期ロードにかかる時間が大幅に長くなる可能性があるため、Webではうまく機能しません。

実際には、多くの開発者は、AMDを目にする前にNode(したがってCommonJS)を使用していました。さらに、多くのライブラリ/モジュールは、AMD(関数exportsからモジュールを返す)ではなく、CommonJS(オブジェクトに物を追加することによって)用に作成されています。defineしたがって、ノード化されたWeb開発者の多くは、Web上でCommonJSライブラリを使用したいと考えています。<script>タグからの読み込みがブロックされているため、これが可能です。browserifyのようなソリューションは、CommonJS(Node)モジュールを取得してラップし、スクリプトタグに含めることができるようにします。

したがって、Web用に独自のマルチファイルプロジェクトを開発している場合は、RequireJSを強くお勧めします。これは本当にWeb用のモジュールシステムです(ただし、公正な開示では、AMDはCommonJSよりもはるかに自然です)。最近、RequireJSで基本的にCommonJS構文を使用できるようになったため、区別の重要性は低くなりました。さらに、RequireJSを使用してノードにAMDモジュールをロードできます(ただし、私はnode-amd-loaderを好みます)。

0 投票する
18 に答える
15229 参照

javascript - Javascript 関数のスコープと巻き上げ

Ben Cherry による JavaScript のスコーピングとホイストに関する素晴らしい記事を読みました。

上記のコードを使用すると、ブラウザは「1」を警告します。

「1」を返す理由はまだわかりません。彼の言うことのいくつかが頭に浮かびます: すべての関数宣言は一番上に持ち上げられます。関数を使用して変数のスコープを設定できます。まだクリックしません。

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

c# - c# のスコープの問題、簡単な修正だと思います

だから私は次のコードを持っています、そしてそれは私が何をしても次のような部分を得ることができないという事実を除いて、ほぼ完璧に動作します:for (int.parse(txtGuess.Text) == numbGen)コードのどこに配置しても「numbGen」を認識しません。ボタンのクリック機能内に配置することはできません。番号を変更したくないためです。番号を正しく取得するか、フォームを再度開いた場合を除きます。

}

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

dynamic - Common Lispスコープ(動的vs字句)

編集:同じ質問をする簡単なバージョンを思いついたので、最初の答えの後にサンプルコードを変更しました。

私は現在、CommonLispのスコープ特性を学んでいます。しっかりと理解したと思った後、結果を予測できるいくつかの例をコーディングすることにしましたが、明らかに間違っていました。私は3つの質問があり、それぞれが以下の例に関連しています。

例1:

出力:

質問:これは理にかなっています。xは静的スコープであり、fun2には、xの値を明示的に渡さずに見つける方法がありません。

例2:

出力:

質問:xが100の値ではなく、fun1が与えた値でfun2に突然表示される理由がわかりません...

例3:

出力:

質問:宣言されていない変数でsetfを呼び出すことは明らかに未定義なので、これらの結果を無視する必要がありますか?これは、2番目の例で期待することです...

任意の洞察をいただければ幸いです...

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

scala - メソッド内のScalaのあいまいな変数名

Scalaと変数スコープに関するいくつかの質問を見てきました(Scala変数スコープの質問など)

ただし、特定のユースケースを機能させるのに問題があります。

私がRepoと呼ばれる特性を持っているとしましょう:

そして、Repoの実装を作成する方法があります...

もちろん、2つのsource変数を使用しています。1つはメソッドレベルで、もう1つはRepo実装内です。定義source内からメソッドレベルを参照するにはどうすればよいですか?Repo

ありがとう!

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

scala - Scalaのスコープとメモリの問題

私は非常に多くの数のリストを持っており、それらは多くの数学操作を受けます。私は最終結果だけを気にします。この動作をシミュレートするには、以下のサンプルコードを参照してください。

したがって、xは非常に大きなリストです。結果zだけが気になります。zを取得するには、最初にxを数学的に操作してyを取得する必要があります。次に、yを操作してzを取得します。(操作が非常に複雑なため、1つのステップでxからzに移動することはできません。これは単なる例です。)

したがって、この例を実行すると、おそらくx、y、zがすべてスコープ内にあり、それらがすべてメモリを占有しているために、メモリが不足しています。

だから私は次のことを試みます:

したがって、zのみがスコープに含まれます。したがって、おそらくxとyが作成され、スコープ外になるとガベージコレクションが行われます。しかし、これは何が起こるかではありません。代わりに、私は再びメモリを使い果たしました!

(注:私はjava -Xincgcを使用していますが、役に立ちません)

質問:1つの大きなリストに十分なメモリがある場合、valのみを使用して(つまり、可変変数やListBuffersを使用せずに)、おそらくスコープを使用してgcを強制することでそれを操作できますか?もしそうなら、どのように?ありがとう

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

activerecord - アクティブレコードリレーション結合-3つのメインテーブル、2つの結合テーブル

セットアップ

3つの主要なテーブル(ユーザー、リンク、トピック)と2つの結合テーブル(link_savesとlink_topics)を持つデータモデルがあります。私のモデル:

ユーザー

LinkSave

リンク

LinkTopic

トピック

質問

ユーザーがリンクを保存したすべてのトピックのリストを見つけられるようにしたいと思います。@user.topicsユーザーからトピックに至るまで、5つのテーブルすべてにまたがって実行できるようにしたいと思います。さらに重要なことに、これでActiveRecordリレーションを返し、ユーザートピックのリストをさらにスコープ/ソート/ページングして、これが機能しないようにします。

私は間違った道を進んでいますか?すべてのカスタムSQLを作成せずに、アクティブレコードを介してこれを行う方法はありますか?助けてください!

考えられる答え(更新)

複数has_many :throughのを使用してすべてのホップを作成します。これは機能しますが、ベストプラクティスにはなりませんよね?

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

python - Python スコープの可変と不変の比較

最初はみんなと同じように始めます。私はpythonが初めてです。私の先生は私に問題を出しました:

それは印刷します:

整数は不変であるため、a が 10 のままであることは理解していますが、b が変化し、c が変化しない理由がわかりません。

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

scoping - 静的スコープと動的スコープの類似点

静的スコープと動的スコープの間に類似点はありますか? ほとんど見つかりません。