问题标签 [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 投票
0 回答
272 浏览

angular - 当应用程序被引导或加载时,以角度动态加载所有父路由

我正在使用 Angular 2 构建一个应用程序,我需要在其中检查基本 href 并将其与我的app.routes.ts文件中预定义的父路由集相匹配。

目前,我在提供程序中创建了一个硬编码的 parentRoutes = ['login', 'signup', 'admin', 'user', 'manage'] 数组,其使用方式如下:

我需要使用以下服务动态加载此 parentRoutes 数组:

但这必须在 app.module.ts 中的 customProvider(上面写的)中完成

我尝试调用服务,但从 app.module.ts 文件似乎不可能。此外,还有一个生命周期问题。在加载应用程序时,在定义 this.routePath 之前运行 app.module.ts 中的 customProvider 检查。

0 投票
0 回答
22 浏览

angular - 如何解决 Angular 2 提供程序中的循环依赖

我有多种不同的服务可以扩展另一项服务:

现在我像这样在 AppModule 中配置它们:

显然,Angular 失败了,因为当它试图解析 BetterService 所需的 BaseService 时,它​​仍然使用 BetterService(在无休止的递归中)。我该怎么做才能让它发挥作用?

0 投票
2 回答
81 浏览

python - Python中的循环导入使得无法从上层模块调用函数

下面是我的代码。

主要.py:

模块A.py:

模块B.py:

如果我运行它,我会收到错误消息:

Q1:在我的情况下 moduleB 显式导入 moduleA,因此我希望它可以工作,但它没有。这是因为 Python 兑现进口并且不做两次吗?但是为什么它不能从内存中取出已经兑现的 moduleA.functionA() 而不是失败呢?因此,我认为当前的行为是一个错误。

Q2:如果我删除“globalVariableFromModuleB = moduleA.functionA()”这一行,只留下循环导入“import moduleA”,那么我没有失败。因此,循环依赖在 Python 中是不被禁止的。如果他们不正确地工作,因为它显示了我的例子,他们被允许做什么?

Q3:如果我将“import moduleA”更改为“from moduleA import functionA”,主程序将无法运行,并出现另一条消息“ImportError: cannot import name functionA”。

此外,我想在这里为那些不喜欢重新设计应用程序的人发布一个解决方法,比如我的情况。
解决方法(只是通过实验发现)。在main.py中的“import moduleA”之前添加“import moduleB” ,即:

但是我不得不在代码中的这个导入处留下很长的评论,因为 main.py 不直接使用来自 moduleB 的任何 API,所以它看起来很丑。

有人可以建议一些更好的方法来解决这种情况并回答上面的 3 个问题吗?

0 投票
1 回答
531 浏览

angular - Angular2:解决Http拦截工厂和auth服务之间的循环依赖

我有以下身份验证服务:

以及以下Http拦截器工厂:

基本上这里的要求是,如果从后端收到任何状态为 401 的响应,则应该启动注销过程。

App模块中的设置如下:

这会在Http拦截器需要AuthServiceAuthService需要的地方创建一个循环依赖错误Http

我尝试使用forwardRefto inject Httpin AuthService,但这并没有改变任何东西。

关于如何重组的任何帮助都会很棒。

0 投票
3 回答
432 浏览

python - Python中对象之间的相互递归

我目前正在开发一个模块,该模块允许用户通过创建任务对象的实例(我的模块提供一个任务类)来构建任意任务网络模型(用于离散事件模拟)。除其他外,任务包含描述其完成效果的逻辑,例如不同任务的启动。这样,任务类的一个实例可以引用一个或多个其他实例,具有循环引用/相互递归的可能性。

这是我的代码的一个极其简化的版本:

任务模块.py

任务测试.py

这个实现的问题是我在定义 task2 和 task3 之前就引用了它们。如果我可以排除循环引用,那将不会是世界末日——这只是重新安排对象实例化顺序的问题——但我相信我应该适应这种可能性。我已经考虑了几个潜在的解决方法——大多数会涉及要求用户间接引用任务(即通过一些唯一的标识符值)——但我想知道是否有一个更优雅的解决方案,它涉及一种巧妙的抽象形式。

确保实例化任务/生成任务网络的过程(如 TaskTest.py 中所示)尽可能简单易行是该项目的首要任务,因为这是我模块的用户将花费的大部分时间时间做。

我尝试搜索,但似乎大多数关于相互递归/循环引用主题的问题都涉及函数或类而不是实例。

0 投票
0 回答
622 浏览

python-3.x - 如何清理 Python 包导入语句

所以我决定清理我的包,它有很多模块。为此,我评论了每一个模块导入语句,然后在运行代码时我只是加载了我需要的内容。然而,这很快变成了一场噩梦,我发现自己试图解决循环导入问题,我完全不知道如何解决这个问题。清理包裹最直接的方法是什么?我不认为我会以这种方式到达任何地方。

0 投票
1 回答
103 浏览

python - 循环“将 xyz 导入为 abc”

当我尝试在 Python 3 中进行循环导入时遇到问题。我正在编写一个 PyQt4 应用程序,我想让一些对象在整个应用程序中可用。这样我最终有一些文件:

索引.py

源/blab.py

源/windows.py

源/window_clients/main_window.py

到目前为止,代码有效。但是,出于美学原因,我想将导入命令更改main_window.py为:

抛出一个:

我敢肯定,这与Python 中的循环(或循环)导入有关,他们说不能from a * import b在循环导入中使用。是一样的import a as b吗?如果是这样,是否有另一种方法来更改导入模块的名称?

0 投票
0 回答
215 浏览

haskell - Haskell:在打结时处理循环依赖关系

在编写具有本地类型推断功能的编程语言时(即,它能够推断除函数参数之外的类型,如 Scala),我遇到了循环依赖的问题。

我通过递归探索 AST 来执行类型检查/推理,并将每个可选类型节点延迟映射到类型检查节点。因为任何节点的类型可能取决于 AST 中其他节点的类型,所以我已经打好结这样我可以在推断/检查当前节点的类型时参考其他节点的类型(我保留键入的-AST 在 Reader monad 的环境中)。

这在典型情况下工作得很好,但会因循环依赖而崩溃,因为程序无休止地跟随循环寻找已知类型。

这类问题的解决方案一般(据我所知)是维护一个探索节点的集合,但我想不出在打结时这样做的参照透明方式,因为我事先不知道节点将被访问/评估的顺序,因为这取决于它们彼此之间的依赖关系图。

因此,我似乎需要维护一个本地的、可变的已探索节点集合。为此,我尝试了以下方法:

  • 使用 State monad 失败了,因为似乎每个子计算都收到了自己的状态副本,因此无法在计算的不同分支之间共享有关已探索节点的信息。
  • 将 IO monad 与 IORefs 一起使用,由于其严格性,这使我无法结缘。
  • 与 IORefs 一起使用unsafePerformIO,这引入了突变发生无序或根本不发生的问题。
  • 将 ST monad 与 STRefs 一起使用,这引入了与 IO monad 相同的严格问题。

最后,我想出了一个使用 ST monad 的解决方案,在该解决方案中,我在使用 AST 映射时强制进行惰性求值unsafeInterleaveST,这可行,但感觉很脆弱。

是否有更惯用和/或引用透明的解决方案,不是冗长或复杂的?我会包含一个代码示例,但我对这个问题最简单的表述是大约 250 行。

0 投票
0 回答
54 浏览

c++ - 有没有办法像这样解决循环依赖

我正在编写一个 C 编译器,并且处于语法分析阶段。我有一个语法树节点的层次结构。我想重构代码,但我无法解决这样的依赖关系。

例如,这是一个包含所有预声明类和抽象 Node 类的标头:

primary_expr.h:

postfix_expr.h:

问题是 PrimaryExprNode 及其继承者需要完整声明 PostfixExprNode,因此需要包含 primary_expr.h。另一方面,StructureOrUnionMemberAccessNode 在 Print 函数中需要有关 IdNode 的信息。那么有没有办法解决这个问题呢?或者我只需要将所有内容都保存在一个标题中?

0 投票
2 回答
110 浏览

c++ - c++上的循环依赖和继承编译错误

我在 C++ 中有一个涉及循环依赖和继承的问题。

我已经部分实现了设计,我将使用伪代码来说明问题发生的位置。

第一部分是:

直到这里,程序编译没有警告

然后,我想添加继承如下:

如您所见,编译器会抛出“{ token 之前的预期类名”,这意味着Rel没有解决,但为什么没有继承的第一个代码有效而第二个代码无效?我该如何解决?这是一个“错误”的模式吗?

我正在使用 c++14

我知道有很多关于我遇到的问题的问题,但我找不到具体问题的答案。可能我没看到...