問題タブ [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.

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

c++ - 関数はオブジェクトを使用し、オブジェクトは関数を使用します

私は基本的に、関数がオブジェクトオブジェクトを使用し、オブジェクトがその関数を使用するという循環依存の問題を抱えています。これを回避せずに解決する方法はありますか?

この例がばかげていることは理解していますが、この例には「問題の本質」しか含まれていないことに注意してください。 、そしてそれができるだけでとても便利です。回避せずにこれを行う方法があるかどうかを尋ねています。

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

haskell - Haskell - 周期的なモジュール依存関係の解決

次のコードを書いたとしましょう:

ゲームモジュール

プレーヤーモジュール

とカードモジュール

次に、プレイヤーが順番に手札からカードを引いたりプレイしたりして、ゲームのターンがなくなるまでスコアにボーナスを追加するロジックを実装するコードをいくつか書きます。

しかし、このコードを完成させてみると、私が書いたゲーム モジュールはつまらないものであることに気付きました!

カードゲームをリファクタリングして、カードをプレイすると、単にスコアを追加するのではなく、カードがゲームを任意に変換するようにしたいと考えています。

したがって、Cardモジュールを次のように変更します

もちろん、モジュールのインポートがサイクルを形成します。

この問題を解決するにはどうすればよいですか?

些細な解決策:

すべてのファイルを同じモジュールに移動します。これは問題をうまく解決しますが、モジュール性を低下させます。同じカード モジュールを後で別のゲームに再利用することはできません。

モジュール維持ソリューション:

タイプ パラメータを に追加しますCard

に別のパラメーターを追加しますPlayer

に 1 つの最終的な変更を加えると、次のようになりGameます。

これによりモジュール性が維持されますが、データ型にパラメーターを追加する必要があります。データ構造がこれ以上深くネストされている場合、データに大量のパラメーターを追加する必要があり、この方法を複数のソリューションに使用する必要がある場合は、扱いにくい数の型修飾子が必要になる可能性があります。

では、このリファクタリングを解決するための他の有用な解決策はありますか、それともこれらの 2 つのオプションしかありませんか?

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

java - Spring プロジェクトの Maven 循環依存の問題

~50 個のコンポーネントを含む Spring プロジェクトがあります。残念ながら、クラスの 1 つが Maven で循環依存の問題を引き起こしました。ストーリーは次のとおりです。

Spring プロジェクトに新しいコンポーネントを追加しました。とりあえず呼んでみましょうApple。と@Bean呼ばれるものがありAppleWatchます。実装の 1 つは、Apple別のコンポーネント に住んでいた (依存していた)Foxconnため、AppleWatchという名前の Bean 内のメソッドを呼び出すことができましたCheapLabor

その間、CheapLabor別のコンポーネントに依存していました: Corning. GorillaGlass残業できる必要がありました。

CorningApple の市場のニーズに合わせて同じ量のメガネを作ることでお金を節約したいと考えるまでは、状況はかなり良好でした。getCurrentMarketOrders()そのため、 でメソッドを呼び出そうとしますAppleWatch。そのために、BeanAppleWatchを classにオートワイヤーしましたGorillaGlass.java。それで...

ブーム!循環依存エラー!

Appleそれで、および/またはのために何をすべきかについての提案はありCorningますか?

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

typedef - Hacklang — null 許容の循環型定義を作成できないのはなぜですか?

私は再帰的なコンテナのような構造を実装しようとしています。バニラの巡回型定義が実現できない理由は理解できますが、次のことも許可されないのはなぜですか?

作成は簡単に思えます:

そして、1つを繰り返しても問題はありませんよね?

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

c# - 循環依存関係を持つアイテムを再帰する方法

循環依存関係を持つ可能性のあるアイテムを再帰するより良い方法を探しています。現在、再度処理しないようにするために、既に処理された項目のリストを渡していますが、これはおそらく最善の方法ではありません。

これが私が現在行っていることです:



アイテムは「OwnedItem」タイプでありIEnumerable<OwnedItem>、プロパティに直接依存関係のリスト ( ) を保持しますAllUsedOwnedItemsToBeIncludedが、基本的に、「アイテム」が循環依存関係が発生する可能性のある「アイテム」のリストを保持する場合は常にこれを適用する必要があります。辞書を使用すると、同じ計算を複数回実行するのを回避できます。それは必須ではありません。また、必要なインスタンスは 1 つだけTCObjectComparerですが、これも必須ではありません。助言がありますか?これを処理するための古典的なアルゴリズムが存在するに違いないと思いますが、見つかりません。

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

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?factorpos?

ただし、当然のことながら、再試行してもエラーが発生しますboot run。今回は、 orまたは(最初に試行した方)の:args仕様が不足していると不平を言います。これは、名前空間であるかどうかに関係なく、指定したシンボルが既に存在するvar を指定しない限り、そのエイリアスを使用しないためです。var が存在しない場合、シンボルは展開されません。(さらに楽しむには、fromを削除して何が起こるか見てみましょう。)#'example.core/divisible?#'example.core/prime?#'example.core/factoraliasfdef:as corebuild.boot

そのエイリアスを保持したい場合は、(:require [example.spec])fromを削除してtoexample.coreを追加する必要があります。もちろん、それはfor のに来る必要があります。そうしないとうまくいきません。そして、その時点で、 を に直接入れてみませんか?(require 'example.spec)build.bootrequireexample.corerequireexample.spec

これらの問題はすべて、仕様を実装と同じファイルに入れることで解決できます。では、仕様を実装とは別の名前空間に置くべきでしょうか? もしそうなら、私が上で詳述した問題はどのように解決できますか?

0 投票する
0 に答える
159 参照

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?

0 投票する
0 に答える
151 参照

javascript - モジュール パターンを明らかにする Nodejs の循環依存関係

私は最近この問題に遭遇しており、良い解決策を探しています。以下は、基本的なセットアップです。

c.js では、a は空のオブジェクトです。現在、モジュール a のメソッドにアクセスする必要がある関数 (cFunction) 内に var a=require('./a.js') を配置することで、これを回避しました。しかし、それはこれを行うための最良の方法ですか?

ありがとう、デビッド


main.js

a.js

b.js

c.js

0 投票する
0 に答える
78 参照

c++ - c ++で可変個引数テンプレート間の循環依存を解決するにはどうすればよいですか?

テンプレートのみを使用して、教育目的である種のパーサー ライブラリを実装しようとして、C++ でテンプレート プログラミングを練習しています。

私のライブラリの使用方法の例は次のとおりです。

これは機能していますが、他のタイプに依存するタイプのペアを定義しなければならないことがあるという問題に遭遇しました。

たとえば、これを行う方法を知りたいだけです:

型のみを使用し、コンストラクタ引数を使用せずに Factor の前方宣言を行うにはどうすればよいですか? その可能性はありますか?、注: 空の構造体「Self」を使用して再帰にタグを付けています。

テンプレートの定義へのリンク:

テンプレート コード