問題タブ [lazy-evaluation]
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.
sql - 特定のキーと値のペアについて複数の SQL テーブルをクエリするにはどうすればよいですか?
状況: 複数のインストール可能なモジュールを持つ PHP アプリケーションは、mod_A、mod_B、mod_C などのスタイルで、それぞれのデータベースに新しいテーブルを作成します。それぞれにセクション ID 列があります。
現在、特定の section_id のすべてのエントリを探しています。「Select * from mod_a、mod_b、mod_c ... mod_xyzzy where section_id=value」以外の方法があることを願っています...さらに悪いことに、別の各モジュールのクエリ。
python - 字句クロージャはどのように機能しますか?
Javascriptコードの字句クロージャで発生した問題を調査しているときに、Pythonでこの問題が発生しました。
この例では、を注意深く回避していることに注意してくださいlambda
。意外と「444」と書いてあります。「024」を期待します。
この同等のPerlコードはそれを正しく行います:
「024」が印刷されます。
違いを教えてください。
アップデート:
問題はi
グローバルであることではありません。これは同じ動作を示します。
コメント行が示すように、i
その時点では不明です。それでも、「444」と表示されます。
haskell - 遅延評価が役立つのはなぜですか?
なぜ遅延評価が便利なのか、私は長い間疑問に思っていました。理にかなった方法で私に説明してくれる人はまだいません。ほとんどの場合、それは「私を信頼してください」に要約されます。
注: メモ化という意味ではありません。
hibernate - hibernate: LazyInitializationException: プロキシを初期化できませんでした
これが私を困惑させたものです。基本的な Hibernate DAO 構造を実装しようとしていますが、問題があります。
重要なコードは次のとおりです。
sf の値を sf2 の対応する値と比較しようとしている 3 番目の assertTrue で失敗します。例外は次のとおりです。
c#-3.0 - C# ラムダ式と遅延評価
ラムダ式の利点の 1 つは、結果が必要な場合にのみ関数を評価する必要があることです。
次の (単純な) 例では、テキスト関数はライターが存在する場合にのみ評価されます。
残念ながら、これによりコードの使用が少し見苦しくなります。次のような定数または変数で呼び出すことはできません
このように呼び出す必要があります:
コンパイラは、渡された定数からパラメーターなしの関数を「推測」できません。C# の将来のバージョンでこれを改善する計画はありますか、それとも何か不足していますか?
アップデート:
私は自分で汚いハックを見つけました:
これで、関数を次のように定義できます。
関数または値の両方で呼び出します。
c++ - C++ での遅延評価
C++ には遅延評価のネイティブ サポートがありません (Haskell のように)。
C++ で合理的な方法で遅延評価を実装できるかどうか疑問に思っています。はいの場合、どのようにしますか?
編集:コンラッド・ルドルフの答えが好きです。
たとえば、matrix_add がマトリックスに対して機能するように、T に対して本質的に機能するパラメーター化されたクラス lazy を使用するなど、より一般的な方法で実装することが可能かどうか疑問に思っています。
T に対する操作はすべて、代わりに遅延を返します。唯一の問題は、引数と操作コードを lazy 自体に格納することです。誰でもこれを改善する方法を見ることができますか?
haskell - Haskell ですべてのリダクションを印刷することは可能ですか? WinHugs を使用していますか?
私は次の関数を書きました..そしてWinHugsを使って実行しました
私の出力:
とにかく、すべてのリダクションを出力する方法はありますか..それで、WinHugs 内で行われているコア評価を知ることができますか?
list - Ocaml リスト: 追加およびマップ機能を実装する
現在、友人の OCaml プログラムを拡張しようとしています。これは、いくつかのデータ分析に必要な関数の膨大なコレクションです。
これがある種の「遅延」リストを実装していることはわかりましたが、実際にどのように機能するかはまったくわかりません。上記の型に基づいて Append 関数と Map 関数を実装する必要があります。誰もそれを行う方法を知っていますか?
どんな助けでも本当に感謝します!
c# - 「LazyProperty」クラスを実装する - これは良い考えですか?
遅延評価されるプロパティを記述していることに気付くことがよくあります。何かのようなもの:
これは多くのコードではありませんが、多くのプロパティがある場合は何度も繰り返されます。
LazyProperty というクラスを定義することを考えています。
これにより、次のようなフィールドを初期化できます。
そして、プロパティの本体は次のように縮小できます。
これは、当社のほとんどの製品で共有される共通のクラス ライブラリに含まれるため、会社のほとんどで使用されます。
これが良いアイデアかどうかは、私には判断できません。ソリューションには、次のようないくつかの長所があると思います。
- 少ないコード
- きれいなコード
欠点としては、特に開発者が LazyProperty クラスに慣れていない場合、コードを見て何が起こるかを正確に判断するのが難しくなります。
どう思いますか ?これは良い考えですか、それともやめるべきですか? また、暗黙の演算子は良い考えですか、それとも、このクラスを使用する必要がある場合は、Value プロパティを明示的に使用することをお勧めしますか?
意見や提案を歓迎します:-)
java - 単体テストからのオーバーライドを使用したJavaでの遅延「1回実行」初期化の方法
シングルトンのように動作するが、そうではないコードを探しています(シングルトンが悪いため:)私が探しているものはこれらの目標を満たさなければなりません:
- スレッドセーフ
- シンプル(理解して使用する、つまり数行のコード。ライブラリ呼び出しは問題ありません)
- 速い
- シングルトンではありません。テストの場合、値を上書き(およびテスト後にリセット)できる必要があります。
- ローカル(必要な情報はすべて1か所にある必要があります)
- レイジー(値が実際に必要な場合にのみ実行)。
- 1回実行(RHSのコードは1回だけ実行する必要があります)
コード例:
フィールドは静的ではないことに注意してください。式のRHS(右側)だけが...ある程度「静的」です。i
テストでは、greet
一時的に新しい値を挿入できる必要があります。
また、このコードは、この新しいコードの使用方法の概要を示していることにも注意してください。runOnce()を何かに置き換えるか、別の場所(コンストラクター、多分、またはinit()メソッドまたはゲッター)に移動してください。ただし、LOCが少ないほど良いです。
いくつかの背景情報:
私はSpringを探していません。最も一般的なケースに使用できるコードを探しています。インターフェースを実装する必要があり、必要なテストを除いて2番目の実装はありません。モックオブジェクトを渡します。また、Springは#2、#3、#5に失敗します。構成言語を学ぶ必要があります。アプリコンテキストをどこかに設定する必要があります。XMLパーサーが必要であり、ローカルではありません(情報はいたるところに分散しています)。
#5のため、グローバル構成オブジェクトまたはファクトリは法案を満たしていません。
static final
#4のためにアウトです(ファイナルを変更できません)。static
クラスローダーの問題のためににおいがしますが、おそらく内部で必要になりますrunOnce()
。式のLHSでそれを避けられるようにしたいと思います。
考えられる解決策の1つは、同じオブジェクトを返すデフォルト設定でehcacheを使用することです。キャッシュに入れることができるので、いつでも値を上書きすることができます。しかし、おそらくehcacheよりもコンパクトでシンプルなソリューションがあります(これもXML構成ファイルなどが必要です)。
[編集]なぜそんなに多くの人がこれに反対するのか疑問に思います。これは有効な質問であり、ユースケースはかなり一般的です(少なくとも私のコードでは)。それで、あなたが質問(またはその背後にある理由)を理解していない場合、またはあなたが答えを持っていないか、あなたが気にしない場合、なぜ反対票を投じますか?:/
[EDIT2] Springのアプリコンテキストを見ると、すべてのBeanの99%以上に単一の実装しかないことがわかります。あなたはもっと持つことができますが、実際には、あなたは単にそうではありません。したがって、インターフェイス、実装、構成を分離する代わりに、実装(最も単純な場合)、current()メソッド、およびcurrent()の結果を初期化するための1行または2行の巧妙なコードのみを含むものを探しています。 1回(初めて呼び出されたとき)、同時に結果をオーバーライドできます(可能な場合はスレッドセーフ)。これをアトミックな「if(o == null)o = new O(); return o」と考えてください。ここで、oをオーバーライドできます。たぶん、AtomicRunOnceReferenceクラスが解決策です。
今のところ、私たち全員が毎日持っているものや使用しているものは最適ではなく、私たち全員が頭を叩いて「それだけ」と言うような不可解な解決策があると感じています。数年前に春が来たときに感じたように、私たちはすべてのシングルトンの問題がどこから来たのか、そしてそれらをどのように解決するのかを理解しました。