我有一个由Node对象表示的循环图形结构.甲节点可以是一个标量值(叶)或n> = 1的列表的节点(内节点).
由于可能的循环引用,我不能简单地使用递归的HashCode()函数,它结合了所有子节点的HashCode():它最终会进行无限递归.
虽然HashCode()部分似乎至少可以通过标记和忽略已经访问过的节点来实现,但我有一些麻烦要想到Equals()的工作和有效算法.
令我惊讶的是,我没有找到任何有用的信息,但我相信很多聪明的人都想过解决这些问题的好方法......对吗?
示例(python):
A = [ 1, 2, None ]; A[2] = A
B = [ 1, 2, None ]; B[2] = B
Run Code Online (Sandbox Code Playgroud)
A等于B,因为它代表完全相同的图形.
BTW.这个问题并不针对任何特定的语言,但是在Java中为所描述的Node对象实现hashCode()和equals()将是一个很好的实际例子.
我想在本地保存一个具有循环引用的对象.我有什么选择?
我的第一个想法是使用HTML5本地存储,但由于循环引用,我无法对此对象进行字符串化.
具体来说,我正在尝试保存当前选择的DOMSelection对象.
例:
var sel = window.getSelection();
var selstring = JSON.stringify(sel); // Breaks here ...
localStorage.setItem("selection",selstring);
Run Code Online (Sandbox Code Playgroud)
我现在可以让stringify工作的唯一方法是忽略某些对象,如下所示:
var selstring = JSON.stringify(sel,function(k,v){
if( k=="anchorNode" ||
k=="baseNode" ||
k=="extentNode" ||
k=="focusNode") return undefined;
return v;
});
Run Code Online (Sandbox Code Playgroud)
但这给我留下了一个相当空的DOMSelection对象,这对我所需要的还不够.
有没有其他方法可以保存这个对象?唯一的要求是它在移动游猎中运行,其他任何东西都是真的.解决方案可以是javascript或jquery(或任何其他js lib,如果需要).
感谢您的任何帮助,您可以提供.
我发现很多关于Gson循环引用的文章,但我找不到一个优雅的解决方案.
据我所知,一些解决方案是:
但作为一般性问题,是否有一些解决问题的共同策略?
如何测试循环引用的变量?
我正在使用PHP的var_export()函数,返回字符串参数设置为true.
我发现Warning: var_export does not handle circular references并且想知道是否有人知道测试变量是否包含循环引用的方法,以便我可以在尝试使用它之前使用var_export它.
我知道var_export输出可用于重新创建数组的PHP eval-able文本,即使我没有使用它,我仍然希望在可用时使用此函数,因为输出格式符合我的需要.var_dump不是一个选项,因为它不接受返回字符串的参数.我知道我可以缓冲其输出var_dump优雅地处理循环引用并将缓冲区内容保存到变量但我真的只是想知道是否有人知道在变量中测试此类引用的方法.
如果要创建快速循环引用,请执行以下操作:
$r = array();
$r[] = &$r;
var_export($r, true);
Run Code Online (Sandbox Code Playgroud) 我正在用C#编写一个Web API项目,它使用Entity Framework从数据库中提取数据,将其序列化并发送给客户端.
我的项目有2个类,Post和Comment(来自Post的外键).
这些是我的课程.
发布课程:
public partial class Post
{
public Post()
{
this.Attachment = new HashSet<Attachment>();
this.Comment = new HashSet<Comment>();
}
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
public System.DateTime Created { get; set; }
public Nullable<System.DateTime> Modified { get; set; }
public virtual ICollection<Attachment> Attachment { get; set; }
public virtual ICollection<Comment> Comment { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
评论类:
public partial class Comment …Run Code Online (Sandbox Code Playgroud) serialization entity-framework circular-reference asp.net-mvc-4 asp.net-web-api
当我进入Uncaught TypeError: Converting circular structure to JSON一个大型结构时,很难找到圆形参考的确切位置.
有没有一种简单的方法来查找/调试数据结构中的循环元素?
假设有两个.net项目不在同一解决方案下.ProjectA在solution1下,ProjectB在solution2下.ProjectA引用了ProjectB,ProjectB引用了ProjectA.ProjectA_Class和ProjectB_Class有两个类.ProjectA_Class创建ProjectB_Class的对象,ProjectB_Class创建ProjectA_Class的对象.
namespace ProjectB
{
public class ProjectB_Class
{
public ProjectB_Class()
{
ProjectA_Class projA = new ProjectA_Class();
}
}
}
namespace ProjectA
{
public class ProjectA_Class
{
public ProjectA_Class()
{
ProjectB_Class projB = new ProjectB_Class();
}
}
}
Run Code Online (Sandbox Code Playgroud)
我对循环依赖感到困惑.是不是它在两个类之间创建了循环依赖,尽管它们不在同一个解决方案中?我们知道如果这两个项目都在同一个解决方案中,Visual Studio将不允许我们在ProjectB中引用ProjectA,在ProjectA中引用ProjectB,因为它创建了循环依赖.它是不是在两个项目之间创建循环依赖,尽管它们不在同一个解决方案中?假设,ProjectA中有一个C类,它创建了ProjectB_Class的对象,而ProjectB_Class不使用任何C类实例.它不是循环依赖项,因为ProjectA和ProjectB都有相互引用吗?
更新1 您能解释循环依赖的条件吗?
.net c# circular-dependency design-principles circular-reference
例如:
$ node
> var x = {}
undefined
> x.x = x
{ x: [Circular] }
Run Code Online (Sandbox Code Playgroud)
想知道他们使用什么样的结构来实现这一点,因为它没有直接编码到我刚刚做的事情中。似乎他们会做类似的事情:
var graph = new Graph(object)
graph.detectCircularReferences()
Run Code Online (Sandbox Code Playgroud)
然后它会得到它们,但不确定它是如何工作的。希望学习如何实现。
我正处于学习Dart和Flutter的早期阶段。我正在研究如何实现eventbus,它工作正常,但我注意到小部件(和/或它们的关联状态)持有对(全局) eventbus 的强引用,导致内存泄漏。解决方案是在小部件状态的 dispose 方法中取消订阅,但我想知道是否有更好的方法(我来自 Swift,它允许将变量声明为“弱”)。
编辑
我最终将状态子类化如下......还有更好的建议吗?
abstract class CustomState<T extends StatefulWidget> extends State {
List<StreamSubscription> eventSubscriptions = [];
void subscribeToEvent(Object eventClass, Function callback) {
StreamSubscription subscription = eventBus.on(eventClass).listen(callback);
eventSubscriptions.add(subscription);
}
void dispose() {
super.dispose();
eventSubscriptions.forEach((subscription) => subscription.cancel());
eventSubscriptions = null;
}
}
class MyEvent {
String text;
MyEvent(this.text);
}
class _MyHomePageState extends CustomState<MyHomePage> {
@override
void initState() {
super.initState();
subscribeToEvent(MyEvent, onEventFired);
}
void onEventFired(event) {
print('event fired: ${event.runtimeType} ${event.text}');
}
}
Run Code Online (Sandbox Code Playgroud) memory-leaks weak-references circular-reference dart flutter
在解决方案的主要项目中,我有:
public static void Main(string[] args)
{
// Testing Logs on Azure Application Insights:
var telemetry = new Microsoft.ApplicationInsights.TelemetryClient();
telemetry.TrackTrace("Test of ApplicationInsights.TelemetryClient() on Program.cs");
CreateWebHostBuilder(args).Build().Run();
}
Run Code Online (Sandbox Code Playgroud)
它正在工作,并且日志正在Azure应用程序见解中显示。
不幸的是,当我将相同的代码添加到相同解决方案的另一个项目中时,它不起作用:而是在Azure上引发异常。
我尝试添加对主项目的引用(因为我认为这将导入其项目和其他所需的内容)。不幸的是我不能,因为它说:
不允许循环依赖
因此,我在解决方案的其他项目中添加了相同的细节。这样,它便可以编译,并且我可以上传到Azure。但是由于该错误,我看不到日志(跟踪):
在Azure上显示的日志的文本版本(Trace):
AI (Internal): [Microsoft-ApplicationInsights-AspNetCore-StartupBootstrapper] Could not load Microsoft.AspNetCore.ApplicationInsights.HostingStartup. System.IO.FileNotFoundException: Could not load file or assembly 'Microsoft.AspNetCore.ApplicationInsights.HostingStartup, Culture=neutral, PublicKeyToken=null'. The system cannot find the file specified.
File name: 'Microsoft.AspNetCore.ApplicationInsights.HostingStartup, Culture=neutral, PublicKeyToken=null'
at System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, IntPtr ptrLoadContextBinder)
at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, RuntimeAssembly …Run Code Online (Sandbox Code Playgroud)