在卢阿的quasiquote / quote?

时间:2010-04-30 20:24:26

标签: lua

在Lisp中,我可以:

(a b c d e f g)

表示

look up b, c, d, e, f, g
look up a; apply value of a to above

然后,我也可以:

`(a b c d e f g)

等于

 (list 'a 'b 'c 'd 'e 'f 'g)

现在,在lua,我可以:

[snipplet 1]
foo = {
  Foo,
  {Cat, cat},
  {Dog, dog}
};

最终可能扩展到:     {nil,{nil,nil},{nil,nil}}

而我真正想要的是:

[snipplet 2]
{ "Foo", {"Cat", "cat"}, {"Dog", "dog"}}

在lua中是否有类似反引号的方法?

我发现[snipplet 1]在视觉上比[snipplet 2]更令人愉悦,但我的意思是snipplet 2。

谢谢!

2 个答案:

答案 0 :(得分:6)

没有语法,但你可以尝试这个运行时解决方案:

setmetatable(_G,{__index=function (t,k) return k end})

这使得所有未定义的变量的行为就像它们包含带有名称的字符串一样。

答案 1 :(得分:0)

考虑一个解析包含Lisp语法的字符串并从中构造表的函数。