我发现使用graph gem中的有向图块可以很好地工作,如果代码被封装在一个块中而不是在运行时组合。例如:
require "graph"
digraph do
doublecircle << node("goal")
save "example", "png"
end
将正确呈现如下:
我的目标是(最终)在运行时构建和修改节点和边缘,但每当我尝试使用实例化的图形对象时,我觉得我正在努力克服gem的框架。一个有向图块。例如,即使在阅读了graph.rb library的来源之后,我也无法通过添加/删除节点或动态调整单个节点属性来完全了解如何修改已经实例化的Graph对象。 / p>
例如,我设法通过大量的反复试验来完成以下工作:
require "graph"
graph = Graph.new
graph.node "goal"
graph.nodes["goal"].attributes.push digraph.doublecircle
graph.save "example", "png"
虽然这似乎有效,但它并不能很好地扩展,并且感觉就像一个蛮力的kludge,而不是利用宝石的预期方法。在我看来,上面的代码缺乏优雅和对操作节点和属性数据结构的最佳模式的真正理解。
最终,我希望能够在运行时修改有向图,方法是动态添加和删除节点和边缘以响应用户输入。对于这个特定的用例,是否有更规范的方法?我对这个宝石图表课程的理解中缺少一些基本的东西,还是我想要完成的更好的解决方案?