問題タブ [cyclic-dependency]
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.
c++ - 関数はオブジェクトを使用し、オブジェクトは関数を使用します
私は基本的に、関数がオブジェクトオブジェクトを使用し、オブジェクトがその関数を使用するという循環依存の問題を抱えています。これを回避せずに解決する方法はありますか?
この例がばかげていることは理解していますが、この例には「問題の本質」しか含まれていないことに注意してください。 、そしてそれができるだけでとても便利です。回避せずにこれを行う方法があるかどうかを尋ねています。
haskell - Haskell - 周期的なモジュール依存関係の解決
次のコードを書いたとしましょう:
ゲームモジュール
プレーヤーモジュール
とカードモジュール
次に、プレイヤーが順番に手札からカードを引いたりプレイしたりして、ゲームのターンがなくなるまでスコアにボーナスを追加するロジックを実装するコードをいくつか書きます。
しかし、このコードを完成させてみると、私が書いたゲーム モジュールはつまらないものであることに気付きました!
カードゲームをリファクタリングして、カードをプレイすると、単にスコアを追加するのではなく、カードがゲームを任意に変換するようにしたいと考えています。
したがって、Card
モジュールを次のように変更します
もちろん、モジュールのインポートがサイクルを形成します。
この問題を解決するにはどうすればよいですか?
些細な解決策:
すべてのファイルを同じモジュールに移動します。これは問題をうまく解決しますが、モジュール性を低下させます。同じカード モジュールを後で別のゲームに再利用することはできません。
モジュール維持ソリューション:
タイプ パラメータを に追加しますCard
。
に別のパラメーターを追加しますPlayer
。
に 1 つの最終的な変更を加えると、次のようになりGame
ます。
これによりモジュール性が維持されますが、データ型にパラメーターを追加する必要があります。データ構造がこれ以上深くネストされている場合、データに大量のパラメーターを追加する必要があり、この方法を複数のソリューションに使用する必要がある場合は、扱いにくい数の型修飾子が必要になる可能性があります。
では、このリファクタリングを解決するための他の有用な解決策はありますか、それともこれらの 2 つのオプションしかありませんか?
java - Spring プロジェクトの Maven 循環依存の問題
~50 個のコンポーネントを含む Spring プロジェクトがあります。残念ながら、クラスの 1 つが Maven で循環依存の問題を引き起こしました。ストーリーは次のとおりです。
Spring プロジェクトに新しいコンポーネントを追加しました。とりあえず呼んでみましょうApple
。と@Bean
呼ばれるものがありAppleWatch
ます。実装の 1 つは、Apple
別のコンポーネント に住んでいた (依存していた)Foxconn
ため、AppleWatch
という名前の Bean 内のメソッドを呼び出すことができましたCheapLabor
。
その間、CheapLabor
別のコンポーネントに依存していました: Corning
. GorillaGlass
残業できる必要がありました。
Corning
Apple の市場のニーズに合わせて同じ量のメガネを作ることでお金を節約したいと考えるまでは、状況はかなり良好でした。getCurrentMarketOrders()
そのため、 でメソッドを呼び出そうとしますAppleWatch
。そのために、BeanAppleWatch
を classにオートワイヤーしましたGorillaGlass.java
。それで...
ブーム!循環依存エラー!
Apple
それで、および/またはのために何をすべきかについての提案はありCorning
ますか?
typedef - Hacklang — null 許容の循環型定義を作成できないのはなぜですか?
私は再帰的なコンテナのような構造を実装しようとしています。バニラの巡回型定義が実現できない理由は理解できますが、次のことも許可されないのはなぜですか?
作成は簡単に思えます:
そして、1つを繰り返しても問題はありませんよね?
c# - 循環依存関係を持つアイテムを再帰する方法
循環依存関係を持つ可能性のあるアイテムを再帰するより良い方法を探しています。現在、再度処理しないようにするために、既に処理された項目のリストを渡していますが、これはおそらく最善の方法ではありません。
これが私が現在行っていることです:
アイテムは「OwnedItem」タイプでありIEnumerable<OwnedItem>
、プロパティに直接依存関係のリスト ( ) を保持しますAllUsedOwnedItemsToBeIncluded
が、基本的に、「アイテム」が循環依存関係が発生する可能性のある「アイテム」のリストを保持する場合は常にこれを適用する必要があります。辞書を使用すると、同じ計算を複数回実行するのを回避できます。それは必須ではありません。また、必要なインスタンスは 1 つだけTCObjectComparer
ですが、これも必須ではありません。助言がありますか?これを処理するための古典的なアルゴリズムが存在するに違いないと思いますが、見つかりません。
clojure - 仕様が別の名前空間にある場合、意図した目的のために仕様を使用するにはどうすればよいですか?
clojure.spec
ガイドの例の 1 つは、単純なオプション解析仕様です。
後で、検証conform
セクションで、この仕様を使用して内部的にその入力を行う関数が定義されます。
このガイドは REPL から簡単に理解できるようになっているため、このコードはすべて同じ名前空間で評価されます。ただし、この回答では、@levand は仕様を別の名前空間に配置することを推奨しています。
私は通常、スペックが記述している名前空間と並んで、仕様を独自の名前空間に入れます。
これは上記の使用法を壊します::config
が、その問題は解決できます:
仕様のキー名は、仕様の名前空間ではなく、コードの名前空間にあることが望ましいです。これは、キーワードで名前空間エイリアスを使用することで簡単に実行できます。
彼は続けて、仕様と実装を同じ名前空間に入れることができると説明していますが、それは理想的ではありません:
確かに、同じファイル内の仕様コードのすぐそばにそれらを配置することはできますが、それは読みやすさの IMO を損ないます。
ただし、これがdestructuringでどのように機能するかがわかりません。例として、上記のコードを複数の名前空間に変換した小さなBootプロジェクトをまとめました。
boot.properties
:
src/example/core.clj
:
src/example/spec.clj
:
build.boot
:
しかし、もちろん、これを実際に実行するとエラーが発生します。
(require 'example.spec)
に追加することでこの問題を解決できますbuild.boot
が、これは見苦しく、エラーが発生しやすく、仕様の名前空間の数が増えるにつれて、さらに多くなるでしょう。require
いくつかの理由により、実装の名前空間から仕様の名前空間を取得できません。を使用した例を次に示しますfdef
。
boot.properties
:
src/example/spec.clj
:
src/example/core.clj
:
build.boot
:
最初の問題は最も明白です。
の仕様では、述語を使用して返された要素を検証しfactor
たいと考えています。prime?
この仕様の優れた点は、それが正しいとfactor
仮定すると、関数を完全に文書化し、その関数の他のテストを作成する必要がなくなることです。しかし、それがあまりにもクールだと思う場合は、何かに置き換えることができます.prime?
factor
pos?
ただし、当然のことながら、再試行してもエラーが発生しますboot run
。今回は、 orまたは(最初に試行した方)の:args
仕様が不足していると不平を言います。これは、名前空間であるかどうかに関係なく、指定したシンボルが既に存在するvar を指定しない限り、そのエイリアスを使用しないためです。var が存在しない場合、シンボルは展開されません。(さらに楽しむには、fromを削除して何が起こるか見てみましょう。)#'example.core/divisible?
#'example.core/prime?
#'example.core/factor
alias
fdef
:as core
build.boot
そのエイリアスを保持したい場合は、(:require [example.spec])
fromを削除してtoexample.core
を追加する必要があります。もちろん、それはfor の後に来る必要があります。そうしないとうまくいきません。そして、その時点で、 を に直接入れてみませんか?(require 'example.spec)
build.boot
require
example.core
require
example.spec
これらの問題はすべて、仕様を実装と同じファイルに入れることで解決できます。では、仕様を実装とは別の名前空間に置くべきでしょうか? もしそうなら、私が上で詳述した問題はどのように解決できますか?
haskell - How to preserve native cyclic list structure during transformations in Haskell?
I'm studying graph-like things handling in Haskell using 'tying the knot' technique. I suppose, cyclic lists is just kind of infinite list internal implementation, so in ideal world one should not care about subj. But it can have dramatic effect on computational complexity, consider the example, 1D cellular automata with looped world:
This is a loop with just two cells. Let's make a step:
Thats good, now two steps:
That's five calls instead of four, and it actually means increase count of calls on each step, so we have quadratic complexity on total step count instead of linear. I've could make cyclics explicit, like this:
But it's ugly, while I really interested in more complex structures like graphs. The question: is there a way to have here code both nice and fast? Or is there a hope that compiler will handle code above better in some bright future?
javascript - モジュール パターンを明らかにする Nodejs の循環依存関係
私は最近この問題に遭遇しており、良い解決策を探しています。以下は、基本的なセットアップです。
c.js では、a は空のオブジェクトです。現在、モジュール a のメソッドにアクセスする必要がある関数 (cFunction) 内に var a=require('./a.js') を配置することで、これを回避しました。しかし、それはこれを行うための最良の方法ですか?
ありがとう、デビッド
main.js
a.js
b.js
c.js
c++ - c ++で可変個引数テンプレート間の循環依存を解決するにはどうすればよいですか?
テンプレートのみを使用して、教育目的である種のパーサー ライブラリを実装しようとして、C++ でテンプレート プログラミングを練習しています。
私のライブラリの使用方法の例は次のとおりです。
これは機能していますが、他のタイプに依存するタイプのペアを定義しなければならないことがあるという問題に遭遇しました。
たとえば、これを行う方法を知りたいだけです:
型のみを使用し、コンストラクタ引数を使用せずに Factor の前方宣言を行うにはどうすればよいですか? その可能性はありますか?、注: 空の構造体「Self」を使用して再帰にタグを付けています。
テンプレートの定義へのリンク: