问题标签 [circular-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 投票
2 回答
1325 浏览

.net - 解析实现 ISerializable 的对象的循环引用

我正在编写自己的 IFormatter 实现,但我想不出一种方法来解决两种都实现 ISerializable 的类型之间的循环引用。

这是通常的模式:

然后我这样做:

如果我使用开箱即用的 BinaryFormatter 对 b 进行序列化和反序列化,则上述对引用相等性的测试会如预期的那样返回 true。但我无法想出在我的自定义 IFormatter 中实现这一点的方法。

在非 ISerializable 情况下,一旦解决了目标引用,我就可以简单地使用反射重新访问“待定”对象字段。但是对于实现 ISerializable 的对象,不可能使用 SerializationInfo 注入新数据。

谁能指出我正确的方向?

0 投票
2 回答
925 浏览

c# - 在这种情况下避免循环引用的设计

这是我们的依赖树:BigApp -> Child Apps -> Libraries

我们所有的组件都大量使用上述库之一(LibA)。但它有“少数”公共方法需要来自“更高级别”程序集的类,我们希望避免 CIRCULAR 引用。您对此有什么好的设计建议?

0 投票
1 回答
632 浏览

database - 循环参考数据库的一个例外——是这个吗?

我有 4 个表,链接在一个循环引用中 - 我记得在大学时我被告知这很糟糕,但是也有例外......我希望这是其中之一 :)

我的数据库包含 4 个表;教师、班级、科目和教师班级。

以下总结了我的关系:

  • 一个老师可以有很多课
  • 一个班级可以有很多老师(所以 Teachers_classes 消除了这里的多对多)。
  • 一个类可以有很多科目
  • 一个学科只能有 1 个班级
  • 一个老师可以有很多科目

如果你能想象这一点,我的 ERD 看起来像一个正方形(或圆形)......我已经构建了我的简单应用程序,并被其他人提示检查这个问题..请有人告诉我这是一个例外,为什么?我不记得我被教过的任何东西,但我的应用程序似乎完全可以满足我的要求!

0 投票
3 回答
385 浏览

database-design - DB 设计 - 链接到没有循环引用问题的父级

我无法为以下问题提出解决方案。

假设我有一个如下所示的数据库:

问题表

发行说明表

问题分配表

我想允许将一个问题链接到另一个问题。我考虑在问题表中添加一个名为 ParentIssueId 的列,这将使我能够链接问题,但我预见如果我完成此实现,问题表中会发生循环引用。有没有更好的方法来做到这一点,如果有,怎么做?

谢谢

0 投票
1 回答
2634 浏览

java - Java:使用反射转储对象信息时如何避免循环引用?

我修改了对象转储方法以避免循环引用导致 StackOverflow 错误。这就是我最终的结果:

该方法最初是这样调用的:

所以,基本上我添加了一个 excludeList ,其中包含所有之前检查过的对象。现在,如果一个对象包含另一个对象并且该对象链接回原始对象,则它不应该沿着该链进一步跟随该对象。

但是,我的逻辑似乎有缺陷,因为我仍然陷入无限循环。有谁知道为什么会这样?

编辑:

我仍然收到 StackOverflow 错误

我更新的方法:

编辑2:

您的解决方案似乎非常好。不幸的是,即使我只在一个只有 4 个字段的小类上使用过它,我现在也遇到了 OutOfMemory 错误。这是我最终得到的代码:

这么小的对象不应该导致 OutOfMemory 错误。

有任何想法吗?

编辑3:

改写版:

我假设 getClass().isPrimitive() 仍然适用于数组索引,但我可能错了。如果是这样,您将如何处理?此外,其他 getClass() == Integer 等检查对我来说似乎是不必要的,因为 isPrimitive() 检查应该解决这个问题,对吧?

无论如何,在一个简单的对象上使用时,我仍然会遇到内存不足错误:

0 投票
4 回答
10440 浏览

perl - Perl 中的垃圾收集

与 Java 不同,Perl 使用引用计数进行垃圾收集。我曾尝试搜索一些关于 C++ RAII 和智能指针以及 Java GC 的先前问题,但不了解 Perl 如何处理循环引用问题。

谁能解释 Perl 的垃圾收集器如何处理循环引用?有没有办法回收程序不再使用的循环引用内存,或者 Perl 完全忽略了这个问题?

0 投票
3 回答
1191 浏览

language-agnostic - 如何解决这种循环的、双向的依赖?

我有一个 RequestHandler 类和一个 RequestListener 类。RequestHandler 创建一个 RequestListener 并将其传递给它自己的引用。RequestListener 依次调用 RequestHandler 上的方法来处理不同类型的请求(例如,handleTypeARequest()、handleTypeBRequest() 等)。不幸的是,RequestHandler 也调用 RequestListener 上的方法(例如 processNextRequest()),所以我有一个循环依赖:

这意味着两者之间的耦合更紧密,通常被认为是代码异味。

一种解决方案是使用不同的对象来封装每个请求,而不是使用不同的方法。当出现提示时,RequestListener 可以处理请求并为其返回某种类型的 Request 对象。不幸的是,我不太喜欢这种方法,部分原因是更多对象和类增加了复杂性,部分原因是性能问题(这很重要);直接在 RequestHandler 上调用 handleXXXRequest() 方法比创建一堆对象要快得多,并且可能还维护一个堆栈以在需要时缓冲它们。

这个问题还有其他解决方案吗,而且,这真的是一个问题吗?

0 投票
1 回答
534 浏览

.net - VB.NET - 自定义序列化和循环引用,有干净的解决方案吗?

我正在实现一些自定义序列化(到字节数组),并且遇到了处理循环引用的问题。

例子:

序列化 A 时,我必须序列化 B 的每个实例。

但是,我在序列化 B 时遇到了问题。

如何在不导致无限循环的情况下记录 B 的父级?

一个主意:

如果我知道 B 的实例只会通过 A 的实例的序列化来序列化,那么我可以从 A 的实例处理 MyParent 引用的设置,甚至不将该信息记录在实例的字节缓冲区中B的

这感觉不太对,但它可能是最好的解决方案。

有没有更干净的方法来处理这种情况?

0 投票
1 回答
175 浏览

iphone - 为持有循环引用的对象获取 [NSObject 描述]

我有一个 NSDictionary。它包含几个对象,包括一个子 NSDictionaries 数组,每个子对象都有一个对象,作为@"Parent"指向父 NSDictionary 的那个点。

这个循环引用破坏了使用经典调用检查对象的能力,例如:

有人会推荐一种检查对象的解决方法吗?

0 投票
2 回答
2286 浏览

xml - .NET 4、WCF REST 服务、实体框架、序列化和循环引用

这个标题真够拗口的。让我尽量说清楚...

我有一个用 .NET 4 编写的 WCF REST 服务,它使用实体框架将一些数据从 SQL Server 提取到对象列表中。然后将对象作为 XML 返回给客户端。问题是 XML 由于我的模型的关系而相互引用。

下面是一些代码来帮助说明问题:

我的模型:http ://bara.stardock.com/images/activity_model.png

处理服务逻辑的活动类:

上述类的接口:

Activity 类是由实体框架根据我的活动表模型自动生成的。但是,我确实通过创建一个 ActivitiesList 对象扩展了这个类:

因此,为了再次解释我的问题,我的 XML 不是像它应该的那样简单地返回一个 Activity 列表,而是返回一个 Activity 列表,其中一些活动引用了基本活动中的其他活动。这听起来令人困惑,但请看下面的图片:

返回的 XML:http ://bara.stardock.com/images/activity_xml1.png

引用“i8”的活动是指实际在活动内部的另一个活动,ID 为“i2”:http ://bara.stardock.com/images/activity_xml2.png

我的问题是,如何从 Activity 对象中删除所有这些额外的关系?我希望它只是一个 Activity 列表,没有由实体框架自动生成的嵌套 ActivityType、EntityKey 等。

我希望我已经充分解释了自己。如果没有,请告诉我您还想查看哪些其他详细信息,我会提供。

巴拉