2010-04-30 61 views
2

在Lisp,我可以有:quasiquote /報價在lua?

(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} 
}; 

這最終最有可能擴大到: {零,{零,零},{零,零}}

而我真正想要的是是這樣的:

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

是否有LUA一些反引號樣的方法?

我找到[snipplet 1]比[snipplet 2],但我的意思是snipplet 2

由於更多視覺愉悅!

回答

6

有這個問題並沒有語法,但你可以試試這個運行時解決方案:

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

這使得所有未定義的變量表現得好像他們包含了他們的名字字符串。

+0

訣竅有點兒可愛,但它的問題是,如果定義了值,我會得到值,這可能是一個微妙的錯誤追蹤。 – anon 2010-05-01 00:15:02

+3

只需在空白環境中評估表達式,然後使用上面的metatable設置。 – lhf 2010-05-01 01:52:04

+0

麻煩就在於關閉。 – 2011-05-16 23:00:46

0

考慮一個解析包含Lisp語法的字符串並從中構建表的函數。