问题标签 [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.
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 检查。
angular - 如何解决 Angular 2 提供程序中的循环依赖
我有多种不同的服务可以扩展另一项服务:
现在我像这样在 AppModule 中配置它们:
显然,Angular 失败了,因为当它试图解析 BetterService 所需的 BaseService 时,它仍然使用 BetterService(在无休止的递归中)。我该怎么做才能让它发挥作用?
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 个问题吗?
angular - Angular2:解决Http拦截工厂和auth服务之间的循环依赖
我有以下身份验证服务:
以及以下Http
拦截器工厂:
基本上这里的要求是,如果从后端收到任何状态为 401 的响应,则应该启动注销过程。
App模块中的设置如下:
这会在Http
拦截器需要AuthService
但AuthService
需要的地方创建一个循环依赖错误Http
。
我尝试使用forwardRef
to inject Http
in AuthService
,但这并没有改变任何东西。
关于如何重组的任何帮助都会很棒。
python - Python中对象之间的相互递归
我目前正在开发一个模块,该模块允许用户通过创建任务对象的实例(我的模块提供一个任务类)来构建任意任务网络模型(用于离散事件模拟)。除其他外,任务包含描述其完成效果的逻辑,例如不同任务的启动。这样,任务类的一个实例可以引用一个或多个其他实例,具有循环引用/相互递归的可能性。
这是我的代码的一个极其简化的版本:
任务模块.py
任务测试.py
这个实现的问题是我在定义 task2 和 task3 之前就引用了它们。如果我可以排除循环引用,那将不会是世界末日——这只是重新安排对象实例化顺序的问题——但我相信我应该适应这种可能性。我已经考虑了几个潜在的解决方法——大多数会涉及要求用户间接引用任务(即通过一些唯一的标识符值)——但我想知道是否有一个更优雅的解决方案,它涉及一种巧妙的抽象形式。
确保实例化任务/生成任务网络的过程(如 TaskTest.py 中所示)尽可能简单易行是该项目的首要任务,因为这是我模块的用户将花费的大部分时间时间做。
我尝试搜索,但似乎大多数关于相互递归/循环引用主题的问题都涉及函数或类而不是实例。
python-3.x - 如何清理 Python 包导入语句
所以我决定清理我的包,它有很多模块。为此,我评论了每一个模块导入语句,然后在运行代码时我只是加载了我需要的内容。然而,这很快变成了一场噩梦,我发现自己试图解决循环导入问题,我完全不知道如何解决这个问题。清理包裹最直接的方法是什么?我不认为我会以这种方式到达任何地方。
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
吗?如果是这样,是否有另一种方法来更改导入模块的名称?
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 行。
c++ - 有没有办法像这样解决循环依赖
我正在编写一个 C 编译器,并且处于语法分析阶段。我有一个语法树节点的层次结构。我想重构代码,但我无法解决这样的依赖关系。
例如,这是一个包含所有预声明类和抽象 Node 类的标头:
primary_expr.h:
postfix_expr.h:
问题是 PrimaryExprNode 及其继承者需要完整声明 PostfixExprNode,因此需要包含 primary_expr.h。另一方面,StructureOrUnionMemberAccessNode 在 Print 函数中需要有关 IdNode 的信息。那么有没有办法解决这个问题呢?或者我只需要将所有内容都保存在一个标题中?
c++ - c++上的循环依赖和继承编译错误
我在 C++ 中有一个涉及循环依赖和继承的问题。
我已经部分实现了设计,我将使用伪代码来说明问题发生的位置。
第一部分是:
直到这里,程序编译没有警告
然后,我想添加继承如下:
如您所见,编译器会抛出“{ token 之前的预期类名”,这意味着Rel
没有解决,但为什么没有继承的第一个代码有效而第二个代码无效?我该如何解决?这是一个“错误”的模式吗?
我正在使用 c++14
我知道有很多关于我遇到的问题的问题,但我找不到具体问题的答案。可能我没看到...