问题标签 [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.
design-patterns - 这是一个循环依赖吗
上面的代码片段是否显示了循环依赖。类 foo 具有 bar 类对象的引用。类 bar 引用了 foo 类本身。
c++ - 避免库中的循环重载和专业化依赖(AKA 手动 C++ 导出方法)
有时我想重载或专门化由于循环依赖而早先已调用的模板。
由于它们是模板,解决方案通常是拆分声明和定义。
但是,如果这些模板是#included 库的一部分,这意味着您需要两个#include:
- 一个用于声明,必须在所有专业之前。
- 一个用于“后期”定义,毕竟它必须是专业化的。
(删除的 C++导出关键字(C++11 之前)是一个潜在的解决方案,但它有很多问题)。
有没有人有任何解决方案来避免需要第二个#include?
我考虑过:
尝试制作某种单一的“late_call”转发模板函数,该函数在源代码末尾定义,并使用某种机制从其参数中推断出目标函数。不幸的是,我只能看到这在非常特殊的情况下是如何工作的。
- [--] 大部分都行不通。
- [-] 在源代码末尾需要一个#include。
通过预处理器创建要包含的可扩展标头列表,然后通过单个最终#include 将它们全部包含在最后。使用大量#defines 可以破解这样一个具有固定数量位置的列表。
- [-] 人为限制。
- [-] 使用宏#includes,它搞砸了一些工具。
- [-] 丑得要命。
- [-] 在源代码末尾需要一个#include。
创建我自己的手动 pragma-type 命令,然后编写一个外部工具来运行预处理代码并在编译之前移动内容。
- [+] 完美运行。
- [+] 不需要在源代码末尾添加任何内容。
- [--] 这几乎可以确保没有人会想要使用我的库,而且我自己也可能会讨厌它。
创建一个“late.hpp”,在其中我为每个后期定义添加#includes,由#ifdefs 保护以检查是否需要它们。
- [-] 在源代码末尾需要一个#include。
- [--] 完全打破模块化。
在末尾手动添加后期定义标题列表。
- [--] 打破模块化。如果其他实现发生变化,源文件可能会间接获得新的后期定义要求。
- [-] 丑陋的。
- [--] 潜在的错误来源。
javascript - 当我在 HttpInterceptor 类中注入使用 HttpClient 的服务时,Angular 6 进入循环依赖的无限循环
我在不同的 Angular 版本中多次发现这个问题,但多个消息来源说它已经修复,例如,Stackoverflow 上的另一个类似问题是有这个答案,它说它已在 Angular 5.2 中解决,Github 上的一些其他问题在说它在 6.0.2 中解决,我正在使用 Angular 6.0.3 但我仍然遇到这个问题,每当我尝试在我的 HttpInterceptor 类中注入使用 HttpClient 的服务时(如果在其中收到 jwt,则应该向请求添加一个 jwt 令牌服务)
我没有收到循环依赖的警告或错误,我可以在浏览器控制台中看到拦截器正在调用服务的数千个请求,反之亦然。
处理这个问题的正确方法是什么?(最好不要在本地存储中存储 jwt)
(即使用拦截器并从服务中获取 jwt)
我的服务:
我的 HttpInterceptor:
版本
haskell - 在循环记录中打结
重写以下内容以便编译的最佳方法是什么?两种数据类型相互依赖。
python - 循环导入从 pylint 修复 R0401
Pylint 抱怨 NLTK 包的特定文件的循环导入带有 R0401 错误代码,例如
完整列表在https://github.com/nltk/nltk/issues/2113
但看看进口:
但是看看nltk.internals
https://github.com/nltk/nltk/blob/develop/nltk/internals.py,没有任何循环导入指向nltk.ccg.lexicon
:
消息是什么R0401(cyclic-import)
意思?
查看nltk.ccg.lexicon.py
andnltk.internals.py
没有任何循环的导入,那么如何解决问题。
module - 地形 | 对模块使用“depends_on”时“应用”阶段的循环依赖
在模块上使用时,我正在努力解决terraform apply
阶段性的循环依赖问题。depends_on
我在申请时遇到的错误是:
* Cycle: aws_appautoscaling_policy.queue_depth_based_scale_out_policy, module.my_module.aws_ecs_task_definition.task_definition (destroy), aws_appautoscaling_policy.queue_depth_based_scale_in_policy
plan
舞台看起来很好,舞台上没有错误plan
。
我尝试使用以下命令识别图中的循环,
图中没有显示周期plan
。然后,尝试识别apply
使用中的循环,
遗憾的是,此命令无法在图中显示循环。
幸运的是,我可以apply
使用以下命令在阶段图中看到循环,
我图表中的循环看起来像这样,
虽然,我仍然无法在图中找出这个循环的原因。
此外,似乎问题特别在于添加depends_on
模块。因为我的模块中已经有更多aws_appautoscaling_policy
的东西依赖于aws_appautoscaling_target
哪个依赖aws_ecs_service
,因此最终依赖于它,aws_ecs_task_definition
但这apply
工作正常。
有些aws_appautoscaling_policy
与特定应用程序特别相关,因此我将它们单独添加(而不是作为模块的一部分),但由于只有在服务注册为可扩展目标后才能添加自动缩放策略,因此我添加depends_on
了模块,因为aws_appautoscaling_target
在模块中定义。
这是我的模块代码片段,
这是模块的用法,
管道中遵循的步骤是:
会很高兴了解这个循环背后的原因吗?
要强调的另一点是,terraform apply
当我们只做destroy
所有事情并从头开始重新创建时,这是成功的。taint
只有当我定义任务并且在我的扩展策略中有一些位于模块之外的更新时,才会观察到这个循环。
注意:在我的管道中,我确实污染了以前的任务定义,以确保立即使用新的任务定义启动服务,否则不会立即使用新的任务定义推出任务。
algorithm - 如何计算具有循环依赖关系的有向图中的变化顶点权重?
我正在用 Java 制作一个小游戏来练习编程,并遇到了这个我似乎无法自己解决的小问题。
在这个游戏中,我想建立一个可以买卖物品的虚拟商店。
大多数物品只能通过按照我所谓的“食谱”从其他物品中创建出来才能在游戏中获得。配方基本上只是创建新项目所需的一组项目。一个项目可以有多个配方。配方的结果可以是新数量的多个实例。我将像这样 [item, item, ..., item](结果数量)表示食谱。
所以有基础物品,不能创造,必须通过其他方式获得,有创造物品,只能通过其配方之一获得。
我想尝试模拟供求关系,我想出了这个属性,我称之为“交易金额”,每个项目都初始化为 0。交易金额表示正在出售或购买的商品数量。如果我卖出 X 数量的物品,它的交易量增加 X,如果我购买 Y 数量的物品,它的交易量减少 Y。
现在我需要确定我的物品的价格。
所有基础项目都被分配了一个统一的值。然后将价值和交易金额插入到函数 f(v, t) 中,该函数会输出价格。这个价格总是 >= 0。这个函数的一个属性是,如果交易量 t 为 0,那么结果价格等于输入值 v。所以如果一个玩家购买了一定数量的物品,那么交易量就会变为下降 x,价格接近 0。如果另一个玩家出售相同数量的相同物品,交易量回到 0,价格跳回原始值。
现在所有基础项目都有一个值,我需要计算所有创建项目的值,以便能够使用 f 计算它们的价格。我希望它们的价值基于创建它们所需的最便宜的配方。所以我必须解析所有食谱,将每个食谱中使用的所有项目的价格相加,并确定一个食谱的最低价格。那就是所创建项目的价值。
我可以在一个图中对这个设置进行建模,其中顶点表示可以在商店中交易的商品,并且有向边将一个商品连接到另一个可以从源商品创建的商品。所以我有一个有向边('source -> destination'),其中源是目标食谱之一中的成分。因此,从这个前提出发,我创建了一个包含 600 个左右顶点的随机有向图。每次游戏加载时,此图表都会有所不同,并且生成器应特别允许图表内的循环。
这是一个例子:
项目 A 和 B 是基础项目,其值分别为 10 和 2。它们的交易金额最初为 0,因此它们的价格等于它们的值 10 和 2。
项目 C 是具有两个配方 R1 = A、A、B 和 R2 = B、B、B 的已创建项目。现在我确定 R1 的价格为 22,R2 的价格为 6,这是最低配方价格。因此项目 C 的值为 6(最初交易量为 0,因此价格也是 6)。
在这种情况下,图表看起来像 (A) --> (C) <-- (B)
到目前为止,一切都完美无缺。
现在,当价格-价值依赖关系是循环的时,我遇到的问题就出现了。
以下是我需要帮助的 3 类案例:
(1) - 0 顶点循环
简单地说,物品 A 有一个固定的价格,物品 B 可以从配方 [A, B] 中创建。如果 B 的价格发生变化,则 B 创建的所有项目都必须重新计算。在这种情况下,B 是由 A 和 B 组成的,所以我也必须重新计算 B 的价格。这再次触发了 B 的重新计算等等……我知道前提很奇怪,但把它想象成重新粉刷一扇门(B)。它由相同的门 (B) 加上油漆 (A) 制成。我称其为 0 顶点循环,因为在遍历循环时,您通过 0 个顶点返回到您开始的位置。
(2) - 1 个顶点循环
如果我们从第一个示例中获取相同的项目 A 和 B,并添加具有配方 R1=A、B 和 R2=D、D、D 的项目 C 和具有配方 R3=C 的项目 D。所以C可以“分解”成3个D,3个D可以组合成一个C但既然 C 也可以由 D 制成,并且假设 R2 变得比 R1 便宜,那么我也必须降低 C 的价格,从而再次触发 D 的价格降低等等。这将一直持续到价值收敛到某个地方,具体取决于所涉及配方的成分。我称它为 1 个顶点循环,因为在遍历循环时,您只通过一个顶点。
(3) - n个顶点循环
这是一般情况,我想如果我解决了这个问题,上面的两个具体情况也将得到解决。如果商品 A 由 B 组成,B 由 C 组成,C 由 D 组成,以此类推,直到由 A 组成的商品 Z,那么改变一个的价格将触发下一个的价格变化,这将触发价格下等等等等。这条链实际上可以任意长。**
我正在寻找一种可以解决我的问题的算法。我希望能够计算初始交易金额为 0 的所有物品的所有价值和价格。当玩家买卖物品时,价格变化应该通过图表传播。我考虑过修改 Dijkstra 算法、A*、Bellman-Ford 算法和 Floyd-Warshall 算法,但都无法得到令人满意的结果。
有人可以指出我正确的方向吗?
c# - Datas-project 和 Builders-project 之间的循环依赖
这是我想要实现的代码:
- A
Character
有strength
,constitution
和其他一些统计数据。- 每个
Character
人都有BaseStats
他的班级。- 每个
Character
都有RandomStats
奖金,正值从 0 到 3。- 统计数据不得低于 1,也不得高于 10。
- A
Character
可能有Bonus
并且Malus
在他们的统计数据中。- 如果 a
Character
有 8 instrength
,加上 4 的红利和 1 的 malus,他最终有 10 (8+4-1=11 > 10)。- 如果 a
Character
的体质为 3,加上加值 1,a 的值为 4,那么他最终有 1 (3+1-4=0 < 1)。
在我的 .NET 解决方案中,我尝试将datas
和分开builders
在不同的项目中。目前,我的datas
项目中有这样的东西:
然后,我有 a builder
which sum a List<EntityStats
。
我的问题如下:
我的
builders
项目引用了我的datas
项目。
错误:我想在我的班级中添加一个FinalStats
属性。Character
这FinalStats
应该使用我的EntityStatsBuilder
课程。然后,我的datas
项目应该引用我的builders
项目。
我应该如何修改我的全局架构以避免这种循环依赖?
c# - 循环依赖:IVisitor 和 Datas
我最近询问了循环依赖。答案是专门开发一个关于接口的项目(MyProject.Abstractions
)。现在,这个项目是另一个循环依赖的原因,具有访问者模式。
这是否意味着我的 ICharacterVisitor 应该在我的MyProject.Characters
项目中?我将整个解决方案用作我的 SOLID 培训练习。
angular6 - 解析错误:App Initializer 中的循环依赖
我正在实现应用程序初始化程序,我遇到了如下循环依赖错误
未捕获的错误:提供程序解析错误:无法实例化循环依赖!ApplicationRef ("[ERROR ->]"): 在 NgModule AppModule 中的 ./AppModule@-1:-1 在 NgModuleProviderAnalyzer.push../node_modules/@angular/compiler/fesm5/compiler.js.NgModuleProviderAnalyzer.parse (compiler. js:11472) 在 NgModuleCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.NgModuleCompiler.compile (compiler.js:11836) 在 JitCompiler.push../node_modules/@angular/compiler/fesm5/ compiler.js.JitCompiler._compileModule (compiler.js:23882) 在 compiler.js:23841 在 Object.then (compiler.js:1007) 在 JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js .JitCompiler._compileModuleAndComponents (compiler.js:23839) 在 JitCompiler.push../node_modules/@angular/compiler/fesm5/compiler.js.JitCompiler。 webpack_require @ bootstrap:81 0 @ main.ts:12 webpack_require @ bootstrap:81 checkDeferredModules @ bootstrap:43 webpackJsonpCallback @ bootstrap:30 (匿名) @ main.js:1
这就是我的初始化程序的样子
以下是我在 NgModule 中提供服务的方式
我不确定为什么会看到循环依赖错误