問題タブ [global-variables]

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

php - PHP はクラス関数内から外部 $var にアクセスします

PHP では、クラスの関数内で使用する外部 $var をどのように使用しますか? たとえば、 $some_external_var が true に設定され、次のようなものがあるとします

ありがとう

0 投票する
9 に答える
16989 参照

c++ - 「未使用」のグローバル変数がコンパイルされないようにするにはどうすればよいですか?

C++ でいくつかのクラスをファクトリに登録するプロセスを容易にするために、静的初期化を使用しています。残念ながら、コンパイラーは、コンストラクターで有用な作業を行うための「未使用」オブジェクトを最適化していると思います。グローバル変数を最適化しないようにコンパイラに指示する方法はありますか?

SomeClass のコンストラクターのブレークポイントがヒットしません。私の実際のコードでは、SomeClass はヘッダー ファイルにあり、インスタンスはソース ファイルにあり、多かれ少なかれ単独です。

編集: KJAWolf が推測したように、このコードは実際には実行可能ファイルではなく、静的ライブラリにコンパイルされます。その目的は、静的ライブラリによって提供されるいくつかの型を、型とその作成者の静的リストに登録して、ファクトリが構築時に読み取るようにすることです。これらの型は lib で提供されるため、このコードを実行可能ファイルに追加することは望ましくありません。

また、他の既存のコードを含む別のソース ファイルにコードを移動すると、問題なく動作することがわかりました。これらのグローバル オブジェクトだけで構成されたファイルがあることが問題の原因のようです。その翻訳単位が完全に無視されたかのようです。

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

perl - forループで何かを宣言するときにPerlスクリプトが「グローバル宣言」を要求するのはなぜですか?

infile$digitから読み取っていて、 outfileに出力したいと思います。しかし、Perlスクリプトは「グローバルシンボル「$digit」には明示的なパッケージ名が必要です」というエラーを出します。ただし、グローバルに宣言すると、、この値は、 infileから抽出/読み取られた値ではなく、 outfileに出力されます。何をすべきかについて何か提案はありますか?$digit=''

これは私がそれをしている方法です:

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

r - R のグローバル変数

私はマニュアルを突っ込んでいます.コミュニティに尋ねたかったのです:関数内でグローバル変数を設定するにはどうすればよいですか?

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

c++ - C++ のグローバル初期化はどの程度遅延する可能性がありますか?

globals/static-class-members のすべての初期化は、main() の最初の行の前に行われると考えることに慣れています。しかし、私は最近、「モジュールの動的ロードを支援する」ために、標準が後で初期化を行うことを許可していることをどこかで読みました。動的リンク時にこれが当てはまることがわかりました。ライブラリを dlopen する前に、ライブラリで初期化されたグローバルが初期化されるとは思いません。ただし、静的にリンクされた翻訳単位 (私のアプリの直接の .o ファイル) のグループ内では、この動作は非常に直感的ではありません。これは、動的にリンクするときにのみ遅延して発生しますか?それともいつでも発生する可能性がありますか? (または、私が読んだものが間違っていましたか?;)

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

c++-cli - マネージド型のグローバル オブジェクト

管理型のグローバル/静的オブジェクトを宣言/定義する方法はありますか?

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

winforms - Winform: アプリケーション全体でクラス プロパティにアクセス

これは古くからの疲れた質問に違いないことはわかっていますが、信頼できる友人 (別名 Google) で何も見つけられないようです。

アプリケーションの起動時にユーザーにログインフォームを表示する.net 3.5 c# winformsアプリがあります。ログインに成功したら、DB に移動し、ユーザー固有のデータをいくつか取得して、それらをAppCurrentUser.csというクラスに (プロパティで) 保持します。これにより、アセンブリ内のすべてのクラスでアクセスできるようになります。目的これは、必要なたびに DB を呼び出す代わりに、1 回限りのデータ読み取りでいくつかのプロパティを埋めることができるということです。Web アプリでは通常、セッション変数を使用しますが、その概念が WinForms に存在しないことはわかっています。

クラス構造は次のようになります。

ここで、専門家のアドバイスが必要なオプションがいくつかあります。

「愚かな」クラスなので、プロパティを非静的にし、クラスをインスタンス化してからプロパティを設定する必要があります...しかし、そのインスタンスには、それが作成されたクラス内からしかアクセスできませんよね?

論理的には、これらのプロパティは静的である必要があると思います。これは、アプリケーション全体でクラスを 1 回だけ使用し (新しいインスタンスを作成しないため)、アプリケーションを閉じるとプロパティ値が「リセット」されるためです。(そのインスタンスを作成すると、アプリケーションの終了時に破棄できます)

クラスをどのように構築し、アセンブリ内のすべてのクラスでそのプロパティにアクセスするにはどうすればよいですか? これについてあなたの率直で貴重なアドバイスを本当に感謝します!!

ありがとう!

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

c# - C#:では、静的クラスがグローバル状態情報を格納するための悪い習慣である場合、同じ便利さを提供する良い代替手段は何ですか?

私は、静的クラスがグローバル情報の格納に使用されることに関して、SOで多くの悪い評判を得ていることに気づいています。(そして一般的に軽蔑されているグローバル変数)私は以下の私の例の良い代替案が何であるかを知りたいだけです...

WPFアプリを開発していますが、データベースから取得したデータの多くのビューは、現在ログインしているユーザーのIDに基づいてフィルター処理されます。同様に、私のアプリの特定のポイントは、「管理者」と見なされるユーザーのみがアクセスできるようにする必要があります。

現在、loggedInUserIdisAdminboolを静的クラスに格納しています。

私のアプリのさまざまな部分がこの情報を必要としていますが、この場合、なぜそれが理想的ではないのか、そして代替案は何であるのか疑問に思っています。立ち上がって実行するのは非常に便利なようです。

代替案として私が考えることができる唯一のことは、IoCコンテナーを使用して、このグローバル情報を必要とするクラスにシングルトンインスタンスを注入することです。その後、クラスはそのインターフェイスを介してこれと通信できます。しかし、これはやり過ぎ/分析の麻痺に私を導きますか?

洞察を事前に感謝します。


アップデート

したがって、必要に応じて「グローバル」情報をモックで提供するサービスに交換できるため、IoCを介した依存性注入に傾倒しています。残っているのは、注入されたオブジェクトがシングルトンであるか静的であるかどうかだと思います。:-)

これ以上の議論があるかどうかを確認するのを待っていますが、おそらくマークの答えを選ぶでしょう。そのような正しい方法はないと思います。建設的な代替案がないいくつかの同様の質問について、「これは悪い」「それは悪い」という発言がたくさんあるように思われるので、私を啓発するいくつかの議論を見ることに興味があります。


アップデート#2 それで、ロバートの答えを選んだのは、それが素晴らしい代替案であるためです(代替案は奇妙な言葉だと思います。おそらく、フレームワークに組み込まれているので、One True Wayが見ています)。静的クラス/シングルトンを作成する必要はありません(スレッド静的ですが)。

それでも私が興味を持っているのは、保存しなければならない「グローバル」データがユーザー認証とは何の関係もない場合に、これにどのように取り組むかということだけです。

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

c++ - 組み込みプログラミングでのグローバル変数の回避

私が取り組んでいるタイプの組み込みプログラミングでは、実行中のコードの決定論と透過性が高く評価されます。透明性とは、たとえば、メモリの任意のセクションを見て、そこに格納されている変数を知ることができるということです。したがって、組み込みプログラマーが期待していると確信しているように、 new は可能な限り回避する必要があり、回避できない場合は初期化に限定されます。

私はこれが必要であることは理解していますが、同僚がこれを行う方法には同意しませんし、より良い代替案も知りません。

構造体のいくつかのグローバル配列といくつかのグローバル クラスがあります。ミューテックス用に 1 つ、セマフォ用に 1 つ、メッセージ キュー用に 1 つの構造体の配列があります (これらはメインで初期化されます)。実行されるスレッドごとに、それを所有するクラスがグローバル変数になります。

これに関する最大の問題は、単体テストにあります。テストしたいクラスが#includeグローバル変数をテストしていない場合、モックオブジェクトを挿入するにはどうすればよいですか?

擬似コードの状況は次のとおりです。

foo.h

bar.h

bar.cpp

タスクを増やしたり減らしたりしたい場合はどうすればよいですか? foo1 のコンストラクター内の異なる引数のセットですか? bar.h と bar.cpp を別々に用意する必要があると思いますが、これは必要以上に手間がかかるようです。

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

javascript - Javascript ローカルとグローバル

この混乱は頭の中で整理されたと思っていましたが、何らかの奇妙な理由で機能していません。

関数/スコープの外で変数を宣言し、関数内でvarなしで参照すると、以前に宣言された変数が変更されます...そうですか?

ただし、最初のアラートでは正しい価格が返されますが、2 番目 (最後) のアラートでは 0 が返されます。