问题标签 [cyclic-reference]

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 回答
2278 浏览

jaxb - 使用 @XmlIDREF 避免 JAXB 循环引用

我在带有一些稍微复杂的对象的 Web 服务中使用 JAXB。其中一个对象 Sensor 有一个可以与之通信的其他对象的列表,这些对象必然可以包括自身(无法更改的行为),从而在编组到 XML 期间导致循环引用。

如上所示,我使用@XmlIDREF 和@XmlID 解决了这个问题,它工作得非常好。

通过 wsimport 生成的客户端代码将对象编组为 XML,服务器能够完美地解组它们。

我遇到的问题是,由于某种原因,在服务器端我尝试编组 Sensor 对象时遇到循环引用异常。令人抓狂的部分是服务器端代码包含 wsimport 用于创建客户端代码的 JAXB 注释,效果很好,但由于循环,我无法编组服务器端传感器。

我尝试将 JAXB 添加到客户端代码的所有额外注释复制到服务器端类中,我认为 JAXB 中可能存在运行时错误,阻止它正确应用 @XmlIDREF 注释。那里没有运气。

也许我在这里遗漏了一些非常基本的东西,但这个问题让我有点发疯,当我试图弄清楚时,我陷入了僵局。

我确实注意到我正在调查的一件事是,生成的客户端对象上的某些命名空间不是我所期望的,尽管代码有效。我很想知道服务器上的命名空间问题是否会导致 IDREF 编组爆炸。

0 投票
2 回答
180 浏览

c++ - 数据模型,循环引用

我有以下用于存储经络和纬线的数据结构。

每个制图点存储:
A] 地理和空间坐标、制图变形等。
B] 指向北/南/东/西节点的指针。

它允许存储点之间的关系,首先是它们与经线/平行线的关系...

经线的数据结构存储经线的经度、经线的起点和终点以及点数。

所有点都存储在节点列表中:

但是为 Node2DList 编写复制构造函数存在一个大问题。Meridian/Parallel 和 Node2Dlist 之间存在循环依赖关系。

复制构造函数使用std::map并用新的点和链接替换旧点和链接,这不是实现问题...但是从类 Meridian 开始/结束的指针指向旧 Node2DList 的点... Node2DList 复制构造函数应该通知所有指向旧的经络Node2DList 点并将所有指针更改为新的 Node2DList 点。这个模型不允许。

可能的解决方案是添加两个指向子午线和平行点所属的指针:

恐怕这个提议的模型不好。两个班级之间仍然有自行车参考......有人可以帮我改进它吗?谢谢...

0 投票
2 回答
7127 浏览

c++ - C ++循环包含问题

我有这个文件logger.hpp:

而这个文件 event.hpp

出色地。在 logger.hpp 中包含 event.hpp,在 event.hpp 中包含 logger.hpp。

  • 我需要包含 event.hpp,因为在 logger.hpp 我需要定义运算符。

  • 我需要包含 logger.hpp,因为在 event.hpp 中,要在 Event 类中定义友谊。

这当然是一个循环递归

我试过这个:

1) 在 logger.hpp 中:

不工作。编译器告诉我,在 event.hpp 中有一个未被识别的类型,称为 Logger(他当然是对的):

ISO C++ 禁止声明没有类型的“记录器”

编译器向我指出存在友谊声明的行(在 event.hpp 中)。

2) 在 event.hpp 中:

不工作。编译器告诉我,在 logger.hpp 中有一个未被识别的类型,称为 Event(同样,出于显而易见的原因,它是正确的):

ISO C++ 禁止声明没有类型的“事件”

编译器向我指出存在运算符声明的行(在 logger.hpp 中)。

嗯……不知道该怎么面对?我尝试了一切,我到处提出声明,但是,当然,它们没有任何帮助。这个怎么解决???(我想存在一个最佳实践,我希望这样更好:))。

谢谢你。

0 投票
1 回答
327 浏览

stack-overflow - 使用 FxCop Introspection 进行代码分析的无限循环

我正在尝试编写一个自定义的 FxCop 代码分析规则,该规则将警告开发人员不要使用包含太深嵌套代码块的方法,并敦促他们重新考虑混乱。

前任。我试图避免以下情况:

当我覆盖计算块深度的VisitBlock(Block block)方法时,我得到一个stackoverflow
,因为显然,从块的一个属性到块本身存在一个循环引用。即以下对于某些 i 是正确的:block.Statements[i] == block

为什么会存在这样的循环引用?如何避免?谢谢!

0 投票
5 回答
59955 浏览

c++ - shared_ptr 和 weak_ptr 的区别

我正在阅读 Scott Meyers 的“Effective C++”一书。有人提到有内置指针,它们tr1::shared_ptrtr1::weak_ptr作用类似于内置指针,但它们会跟踪有多少tr1::shared_ptrs指向一个对象。

这称为引用计数。这在防止非循环数据结构中的资源泄漏方面效果很好,但是如果两个或多个对象包含tr1::shared_ptrs这样一个循环,则循环可能会使彼此的引用计数保持在零以上,即使指向循环的所有外部指针都已被破坏。

这就是tr1::weak_ptrs进来的地方。

我的问题是循环数据结构如何使引用计数高于零。我请求一个示例 C++ 程序。问题是如何解决的weak_ptrs?(再次,请举例)。

0 投票
2 回答
377 浏览

f# - F# 中的循环函数/类型依赖

我有一个关于以下最佳方式的问题

我有一个 B 类,我在 B 上有一个组合器,让 foo : B -> int。

我希望 B 类将组合器封装为方法,因此我将其添加为类型扩展。

然后我后来意识到 foo 非常昂贵,并且想通过惰性评估来缓存它的结果

因此,我通过将组合器作为函数传递给构造函数,然后在构造函数中使用 foo = lazy(foo self) 初始化一个字段,从而为系统添加了一个巨大的离合器。

IE

这显然感觉不对

我看到解决此问题的两个选项是 1,创建一个接口并让 foo 继承该接口,2,使所有内容成为静态方法,然后从这些静态方法中创建组合器(与将它们附加到类相反... )

这些都不是很吸引人,我想知道我是否错过了选项 3

哦,我还不能让 let rec 和它一起工作,我也不想因为上面语句中的“某事”依赖于一个依赖于一个函数的函数,这个函数依赖于一个函数( 3深)。

任何意见,将不胜感激

0 投票
4 回答
1357 浏览

scala - 如何在 Scala 中初始化和“修改”循环持久数据结构?

我已经搜索并找到了有关此主题的一些信息,但答案要么令人困惑,要么不适用。

我有这样的事情:

现在,我想说的是,加载一个文件,解析它并从中填充这个数据结构。它是不可变的和循环的,人们怎么可能这样做呢?

另外,假设我确实填充了这个数据结构,现在我想修改它,比如更改 rootThing.refs(3).name,如何做到这一点?


感谢您在此处发布的想法。在这一点上,我在想,如果一个人真的想要这样的持久数据结构,那么跳出框框思考并考虑客户端代码需要提出哪些问题。因此,与其考虑对象和字段,不如考虑查询、索引等。首先,我在考虑: 是否有双向多图持久数据结构?

0 投票
1 回答
118 浏览

sql - 在 EF 4 中处理循环引用

我有一个遗留数据库设计,我正在尝试使用 EF 4 解决。本质上,我有两个相互引用的表,在尝试添加新条目时会导致问题。

我的结构是这样的:

Person 具有 Account (AccountId) 的外键,Account 具有 Person (PrimaryPersonId) 的外键。创建新帐户和人员时,这显然是一个问题。目前的解决方案是在 Person 表上使用插入触发器,在创建人员时使用新的 PrimaryPersonId 更新 Account 表。

我想摆脱对触发器的需求,并尽可能将此代码带入模型中,这样就不会发生“魔术”。EF 4 有没有好的方法来做到这一点?

0 投票
1 回答
5514 浏览

sql - SQL SELECT 在父亲 ID 组织的树中查找循环引用?

循环引用的“乐趣”:

假设我有一个表 ELEMENTS,其中包含由父亲 ID 建模的元素层次结构。

根的父亲 ID 字段为空。

所有其他记录都有一个非空的父亲 ID,带有ID父亲元素的(自动排序的)主键 ( )。

例如,使用

我可以找到所有具有无效父亲引用的元素(FATHER_ID不是外键,让我们假设在这个例子中)。

但是我如何才能找到确实具有有效父引用但其父引用链不以根结尾的元素?我认为这只会发生在循环引用中,例如 A 是 B 的父亲,但 B 也是 A 的父亲。这样的“子树”没有链接到根,因此不是主树的一部分。我想找到这样的子树。

当然,我正在寻找一个查询,它提供那些导致循环引用的元素,无论引用链有多长。

这在 SQL 中是可能的,还是我需要一个迭代解决方案?

0 投票
2 回答
463 浏览

wcf - WCF Ria 服务和循环引用

我正在使用具有一些循环引用的旧数据库。当我从 SL4 客户端使用我的 Ria 服务时。(通过我的 ORM 映射器生成的实体)我收到以下错误:

尝试序列化参数http://tempuri.org/:GetPublicationPagesResult时出错。InnerException 消息是“类型 'xxx.Entities.TblPublicationPage' 的对象图”包含循环,如果禁用引用跟踪,则无法序列化。

我知道如何通过 CyclicReferencesAware 属性或 IsRefence=true 为普通 WCF 启用它。但我不知道如何使用 WCF Ria 服务来做到这一点。