我需要构建一种用户友好的方式来在Lua中声明图形。创建图形的用户是通常不了解Lua语言的计算机科学家。
目前,图表只是普通表格。一个例子(不工作):
local x = "some text"
local a_graph = {
a = 1,
b = {
c = x
},
c = {
k = b
}
}
上述图形描述的工作版本应该足以构建图形,其中“k = b”被“k = b参考”替换(是的,“a_graph”中包含的“b”)。我可以轻松编写函数来进行查找(递归访问父母并查看他们的直接孩子),但我的问题是检测并存储“b”是一个参考。 我还需要允许“c = x”,其中x是现有变量。
我已经找到了两个解决方案:
使用引用周围的函数,它本身写为文本,例如'k = ref(“b”)'。 我不喜欢这个解决方案,因为它对我的用户来说容易出错(他们可能会忘记“参考”或引号)。
在全局查找失败时,对_G或_ENV的__index进行Moodify以返回某些内容。 我测试了它并且它有效,但看起来很奇怪。
还有其他解决方案吗?
答案 0 :(得分:1)
我认为最直接的解决方案是在一些哑表中对图结构进行编码,并使用构造函数将这些表转换为首选的内部图数据结构。构造函数也可以以简单的方式进行错误处理,因为它可以查看所有输入(而不是像ref函数那样本地化的东西)。
将输入表示与最终结果分开也可以让您拥有多种表示形式。例如:
local graph_1 = adjacency_list {
a = {'b'},
b = {'a', 'c'},
c = {'a'},
}
local graph_2 = list_of_edges {
{'a', 'b'},
{'b', 'a'},
{'b', 'c'},
{'c', 'a'},
}
local graph_2 = adjacency_matrix {
{0, 1, 0},
{1, 0, 1},
{1, 0, 0},
}