问题标签 [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

最后修改为Game

这保持了模块化,但需要我向我的数据类型添加参数。如果数据结构嵌套得更深,我可能不得不向我的数据添加大量参数,并且如果我不得不将这种方法用于多个解决方案,我最终可能会得到数量庞大的类型修饰符。

那么,有没有其他有用的解决方案来解决这个重构,或者只有这两个选项?

0 投票
1 回答
206 浏览

java - Spring项目的Maven循环依赖问题

我有一个包含约 50 个组件的 Spring 项目。不幸的是,其中一个类导致了 Maven 中的循环依赖问题。这是故事:

我在我的 Spring 项目中添加了一个新组件。让我们暂时调用它Apple。它有一个@Bean叫做AppleWatch. 其中一个实现是Apple依赖于另一个组件:Foxconn,因此AppleWatch可以调用 Bean 中的一个方法,称为CheapLabor.

同时,CheapLabor依赖于另一个组件:Corning. 它需要GorillaGlass能够加班。

事情一直很好,直到现在Corning意识到它想根据苹果的市场需求制造类似数量的眼镜来省钱。所以它试图getCurrentMarketOrders()AppleWatch. 为此,我将 bean 自动装配AppleWatch到 classGorillaGlass.java中。然后...

繁荣!循环依赖错误!

那么,关于我应该为Apple和/或做什么的任何建议Corning

0 投票
2 回答
201 浏览

typedef - Hacklang — 为什么我不能创建一个可以为空的循环 typedef?

我正在尝试实现一个类似容器的递归结构,我可以理解为什么普通循环 typedef 无法实现,但为什么以下内容也被禁止?

创建一个似乎很容易:

并且迭代一个也应该没有问题,对吧?

0 投票
1 回答
137 浏览

c - 将多个头文件链接到c文件

我将如何将两个相互依赖的头文件与它们的 c 文件链接起来?

例如,我有一个文件stack.h依赖于在 中声明的结构linkedlist.h,并且文件“stack.c”调用了linkedlist.c依赖于两个头文件的函数。main.c取决于两个头文件

链表.h

堆栈.h

0 投票
4 回答
121 浏览

c# - 如何递归具有循环依赖的项目

我正在寻找一种更好的方法来递归可能具有循环依赖关系的项目。目前,我传递了一个已处理项目的列表,以便不再处理它们,但这可能不是最好的方法。

这是我目前正在做的事情:



这些项目属于“OwnedItem”类型,并IEnumerable<OwnedItem>在属性中保留其直接依赖项的列表(),AllUsedOwnedItemsToBeIncluded但基本上只要“项目”保留可能发生循环依赖的“项目”列表,这应该适用。使用字典只是避免多次进行相同的计算;这不是必需的。此外,只需要一个 的实例TCObjectComparer,但这也不是必需的。有什么建议么?我认为必须存在一些经典算法来处理这个问题,但我找不到它。

0 投票
1 回答
2519 浏览

clojure - 如果它们位于单独的命名空间中,我如何将我的规范用于其预期目的?

clojure.spec指南中的一个例子是一个简单的选项解析规范:

稍后,在验证部分,定义了一个函数,该函数在内部conform使用此规范作为其输入:

由于该指南旨在易于从 REPL 中遵循,因此所有这些代码都在同一个命名空间中进行评估。不过,在这个答案中,@levand 建议将规范放在单独的命名空间中:

我通常将规范放在他们自己的名称空间中,以及他们所描述的名称空间中。

这会破坏::config上面的用法,但可以解决这个问题:

规范键名最好位于代码的命名空间中,而不是规范的命名空间。通过在关键字上使用命名空间别名仍然很容易做到这一点:

他继续解释说,规范和实现可以放在同一个命名空间中,但这并不理想:

虽然我当然可以将它们放在同一个文件中的规范代码旁边,但这会损害 IMO 的可读性。

但是,我无法看到它如何与destructuring一起使用。作为一个例子,我把上面的代码翻译成多个命名空间放在了一个小的Boot项目中。

boot.properties

src/example/core.clj

src/example/spec.clj

build.boot

但是,当然,当我实际运行它时,我得到一个错误:

(require 'example.spec)我可以通过添加to来解决这个问题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 or or (无论哪个碰巧先尝试)的:args规范。这是因为,无论您是否使用名称空间,都不会使用该别名,除非您为其指定的符号命名为 var that already exists。如果 var 不存在,则符号不会被扩展。(为了更有趣,删除from看看会发生什么。)#'example.core/divisible?#'example.core/prime?#'example.core/factoraliasfdef:as corebuild.boot

如果要保留该别名,则需要删除(:require [example.spec])fromexample.core并添加(require 'example.spec)to build.boot。当然,这require需要for之后example.core,否则它将不起作用。到那时,为什么不直接把它require放进example.spec去呢?

所有这些问题都可以通过将规范与实现放在同一个文件中来解决。那么,我真的应该将规范放在与实现不同的命名空间中吗?如果是这样,我上面详述的问题如何解决?

0 投票
0 回答
159 浏览

haskell - 如何在 Haskell 中的转换过程中保留本机循环列表结构?

我正在研究使用“打结”技术在 Haskell 中处理类似图形的事物。我想,循环列表只是一种无限列表内部实现,所以在理想世界中,人们不应该关心主题。但它会对计算复杂性产生显着影响,考虑以下示例,具有循环世界的一维元胞自动机:

这是一个只有两个单元的循环。让我们迈出一步:

很好,现在分两步:

这是 5 次调用而不是 4 次,这实际上意味着增加每一步的调用次数,所以我们在总步数上具有二次复杂度而不是线性。我可以使循环明确,如下所示:

但这很丑,虽然我真的对更复杂的结构感兴趣,比如图形。问题:有没有办法让这里的代码既好又快?还是希望编译器在某个光明的未来能够更好地处理上面的代码?

0 投票
0 回答
151 浏览

javascript - Nodejs 循环依赖与揭示模块模式

我最近一直遇到这个问题,正在寻找一个好的解决方案。下面是基本设置。

在 c.js 中,a 是一个空对象。目前我通过将 var a=require('./a.js') 放在需要访问模块 a 方法的函数 (cFunction) 中来解决这个问题。但这是解决这个问题的最好方法吗?

谢谢,大卫


main.js

一个.js

b.js

c.js

0 投票
0 回答
78 浏览

c++ - 如何解决 C++ 中可变参数模板之间的循环依赖关系?

我正在用 C++ 练习模板编程,试图仅使用模板来实现某种用于教育目的的解析器库。

我的图书馆应该如何使用的一个例子是:

这是可行的,但我遇到的问题是有时必须定义一对依赖于另一个类型的类型,反之亦然。

我只想知道我该怎么做,例如:

我怎样才能只使用类型而不使用构造函数参数来进行因子的前向声明?它可能吗?注意:我使用空结构“Self”来标记递归。

链接到模板的定义:

模板代码