問題タブ [global-state]
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.
testing - どうすればグローバル状態を回避できますか?
それで、私はグーグルのテストブログを読んでいました、そしてそれはグローバルな状態が悪くてテストを書くのを難しくしていると言います。私はそれを信じています-私のコードは今テストするのが難しいです。では、どうすればグローバル状態を回避できますか?
私がグローバルステートを使用する最大の目的は(私が理解しているように)、開発、受け入れ、および本番環境の間で重要な情報を管理することです。たとえば、「DBConnectionString」という静的メンバーを持つ「Globals」という名前の静的クラスがあります。アプリケーションがロードされると、ロードする接続文字列を決定し、Globals.DBConnectionStringにデータを入力します。ファイルパス、サーバー名、およびその他の情報をGlobalsクラスにロードします。
私の関数のいくつかはグローバル変数に依存しています。したがって、関数をテストするときは、最初に特定のグローバルを設定することを忘れないでください。そうしないと、テストが失敗します。これは避けたいです。
状態情報を管理する良い方法はありますか?(または、グローバル状態を誤って理解していますか?)
multicore - 純粋関数はグローバル状態を読み取ることができますか?
注意: 「純粋な」機能とは、「純粋な仮想」
を意味するものではありません。
関数がグローバル状態を「読み取る」場合、それは自動的に不純になりますか? それとも他の要因に依存しますか?
自動的に不純になる場合は、その理由を説明してください。
他の要因に依存する場合は、それらが何であるかを説明してください。
asp.net-mvc - asp.net mvc アプリケーションのグローバル状態
問題: Web コンソールに、アプリケーションがインストールされているすべてのコンピューターのリストが表示されます。各マシンには、関連付けることができるいくつかの識別情報があります。部門名、チーム名などの単純な文字列。ユーザーがこれらの識別フィールドの名前を変更し、必要なだけ追加/削除できるようにする必要があります。これをどのように実装するのが最善でしょうか?
最初は、これをシングルトンとして実装できると思っていました。アプリケーションの開始時に、データベースから最後に設定された IDフィールド名を読み取り、文字列のリストのシングルトン インスタンスを作成できました。これは、ID 情報を表示またはアクセスする必要があるすべての機能に渡すことができます。このオプションの魅力は、ユーザーが ID フィールド名を UI から変更したり、フィールドを追加または削除したりした場合に、シングルトン オブジェクトを簡単に変更でき、変更が反映されることです。
しかし、私が望むものを達成するためのより良い方法があるに違いないと感じています。ユーザーが自由に変更できる情報がたくさんあり、それらを追跡する必要があるためです。
助言がありますか?
perl - Perlのフリップフロップ演算子はバグがありますか?グローバル状態ですが、どうすればリセットできますか?
がっかりしました。さて、これはおそらく私が今までに見つけた中で最も楽しい Perlのバグでした。今日でも私はPerlについて新しいことを学んでいます。基本的に、左側がtrueを返すまでfalseを返し、次に右側がfalseを返すまでtrue..
を返すフリップフロップ演算子は、グローバル状態を維持します(またはそれが私が想定していることです)。
リセットできますか(おそらく、これはほとんど使用されていないPerl 4-esqueへの良い追加になるでしょうreset()
)?または、この演算子を安全に使用する方法はありませんか?
また、これ(グローバルコンテキストビット)がどこにも文書化されていませんperldoc perlop
。これは間違いですか?
コード
ネタバレ
php - PHPにグローバルなクロスリクエストクロスセッション状態はありますか?
すべてのリクエストで使用するデータをキャッシュしたいと思います。コードファイルの変更時にフラッシュされるメモリ内キャッシュが欲しいです(情報はリフレクションによって取得され、コードファイルを変更するとおそらく無効になります)。これは、サードパーティの外部サービス(memcachedなど)なしで可能ですか?
追加: ApacheのようなWebサーバーがいくつかのワーカープロセスを作成することを私は知っています。それぞれに独自のキャッシュがあれば問題ありません。
database - データベースがグローバルな状態の形式と見なされないのはなぜですか?
私は違いについて一般的な直感を持っていますが、データベースがグローバル状態と異なる理由を正確に特定することはできません.
「グローバル状態」の単純な定義により、データベースは通常、少なくともアプリケーショングローバルです。実行中にデータベースを変更するアプリを使用することも考えられますが、一般的にはグローバルに使用されます。
状態に関しては、データベースに状態が含まれている場合について議論する必要はないと思います。
では、データベースが「悪い」種類のグローバル状態と異なるのはなぜでしょうか?
この質問は、オブジェクトがその親について知る必要がある密結合を回避しようとしているために発生しました。
たとえば、戦略ゲームをプレイしていて、ユニットの 1 つに、敵ユニットにダメージを与えると、そのユニットの所有者が x ゴールド (x は与えられたダメージの量) を失うという能力があるとします。
通常の状況では、ユニットは自分の所有者が誰であるかを知る必要はありません。所有者はユニットを制御する人なので、所有者はユニットにコマンドを発行するだけで、ユニットはその役割を果たします。
ただし、外部要因により、ユニットの所有者が誰であるかを調べる必要が生じます。この場合、攻撃しているユニットは攻撃しているユニットを知っているので問題ありません。しかし今では、攻撃しているユニットを知ることに加えて、所有者が 5 ゴールドを失うようにするために、所有者をさらに知る必要があります。
元の質問から意図した以上に逸脱してしまいましたが、ゲームの状態がリレーショナル データベースに保存されている場合、ユニットが所有者を直接知る必要なく、ターゲットの所有者を照会するのは簡単です。そのようなデータベースがオブジェクトである場合、そのデータベースはすべての状態を完全に把握しており、さらに変更可能であるという意味で、そのデータベースを神のオブジェクトと呼びます。
では、データベースがグローバルな状態と異なるのはなぜでしょうか?
functional-programming - 変更可能な共有状態を減らす
そこで、F# の足を伸ばすために、レイ トレーシングのチュートリアルを行っています。チュートリアルは C++ で書かれているため、機能的な方法で概念を適用する方法を理解するのはかなり楽しい課題です。最終的にはレイトレーサーを並行して実行するつもりなので、すべてをできるだけ機能的な方法で書きたいと思います。しかし、それは私を次のような状況に陥らせました。その核心は、レイ トレーシング以外のトピックに現れると確信しています。
Engine
(とりわけ)Scene
オブジェクト(オブジェクトのコレクション)を格納するオブジェクトがありPrimitive
ます。現在、そのScene
中Primitive
の と は完全に不変です。
レンダリング時間を改善するために、通常の 3 次元グリッドを実装しています。効果的な方法でグリッドをトラバースするために、このチュートリアルでは、トラバーサル アルゴリズムと、グリッド境界をまたぐプリミティブの交差テストの数を減らすために、このペーパーを参照しています。後半部分の仕組みは次のとおりです。
- それぞれ
Ray
に固有のrayID
- それぞれ
Primitive
にlastRayID
フィールドがあります。 Ray
が との交差をチェックするときPrimitive
、- のが
rayID
のRay
と等しい場合、交差テストはスキップされます。lastRayID
Primitive
- それ以外の場合、テストが実行され、
rayID
のが のフィールドにRay
格納されます。lastRayID
Primitive
- のが
これは、交差テストをキャッシュするための優れた方法ですが、シーケンシャル レイ トレーサ用に設定されており、2 つの同時レイに対してもまったく機能しません。したがって、フィールドを使用mutable
してこのアルゴリズムを実装することはできますが、本質的に並列化可能なレイ トレーサーという最終目標を達成することはできません。
私には1つの考えがあります。各プリミティブで変更可能な状態を保存する際の問題は、レンダリング アルゴリズムに関して、シーンがグローバル エンティティであることです。一方、各光線は完全に自己完結型です。そのため、各レイで、既にテスト済みのプリミティブのセットを構築できると考えました (このセットは、lastRayID
上記のフィールドに相当します)。これに関する問題は、各レイの寿命が非常に短く、常に多くのレイが存在する可能性があるため、各レイにそのようなデータ構造を設定するとコストがかかる可能性があることです ((デ) 割り当て時間とメモリ消費コストがすぐに加算される可能性があります)
この種の状況に対処するためのアドバイスはありますか? 共有された可変状態をローカルの可変状態などに変換することが一般的なアイデアであったとしても、それは私を大いに助けると確信しています。必要に応じて何かを明確にしていただければ幸いです。
ruby - 複数の Thor タスクでグローバル データを共有するためのベスト プラクティス
現在、いくつかの異なるタスクをサポートする Thor 実行可能ファイルを構築しています。一部のタスクは、他のタスクを呼び出します。例えば
- 認証
- ローカルユーザーを認証します
- 作成
- 認証を呼び出す
- 何かをします
- 設定を呼び出す
- 構成、設定:
- 認証を呼び出す
- 何かをします
thor の優れた点は、3 つのタスクすべてを個別に呼び出すことができるようになったことですが、たとえば、authenticate は呼び出しを介して 1 回だけ呼び出されるようにしてください。
しかし、これらのタスク間でデータを共有するための最良の方法は何ですか? たとえば、認証時に現在のユーザーのユーザー ID を設定したいとします。したがって、Web サービスからデータを要求する場合、同じ方法でコードのどこからでもユーザー ID を取得できます。
現在、モジュールを介してこれを実装していますが、これが最善の方法であるかどうかはよくわかりません。
シングルトンを使用するのも別の方法ですが、どういうわけか、これはこの目的には少し多すぎるように思えます。
おそらく、これを行うためのより良い方法の経験があるかもしれませんし、モジュールを使用することがとにかく情報を保存するための最良の方法であるかもしれません。
mysql - uptime と uptime_since_flush_status の違いは何ですか?
私はmysqlグローバルステータス変数を読んでいて、2つの値が表示されます:
- 稼働時間
- uptime_since_flush_status
とはuptime_since_flush_status
どういう意味ですか?
android - Androidでメインアクティビティから複数のアクティビティに変数を送信する方法は?
私は持っているアプリケーションを作成しようとしています
MainActivity
はログイン ページであり、4 つの変数が含まれています。ログイン ボタンをクリックすると、インテントを使用して別のアクティビティ HomeTab に移動します
Intent i = new Intent(FirstMain.this,Home_tab.class);
startActivity(i);
HomeTab - 3 つのタブ ビューがあります。
a. プロフィール
b. アカウント
c. 設定
私の問題は、その 4 つの変数を MainActivity からタブの 3 つのアクティビティに渡す方法です。