描述Lua中的图结构

我需要构建一种用户友好的方式来声明 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是现有变量。

我提出了两个解决方案:

  1. 在引用周围使用函数,其本身写为文本,例如'k = ref(“b”)'。 我不喜欢这个解决方案,因为它对我的用户来说容易出错(他们可能会忘记“ref”或引号)。

  2. 修改_G或 _ENV的 __index,在全局查找失败时返回某些内容。 我进行了测试,它可以正常工作,但似乎很奇怪。

还有其他解决方案吗?

点赞
用户90511
用户90511

我认为最直接的解决方案是在一些愚蠢的表格中编码图形结构,并使用构造函数将这些表格转换为您喜欢的内部图形数据结构。构造函数还可以以直接的方式进行错误处理,因为它可以查看所有输入(而不是像您的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},
}
2014-02-12 05:23:16