tags:

views:

54

answers:

1

In Lisp, I can have:

(a b c d e f g)

which means

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

Then, I can also have:

`(a b c d e f g)

which is the equiv to

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

Now, in lua, I can have:

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

Which ends up most likely expanding into: { nil, { nil, nil}, {nil, nil}}

Whereas what I really want is something like:

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

Is there some backquote-like method in lua?

I find [snipplet 1] to be more visually pleasing than [snipplet 2], but what I mean is snipplet 2.

Thanks!

+4  A: 

There's no syntax for that but you can try this run-time solution:

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

This makes all undefined variables behave as if they contained strings with their names.

lhf
The trick is kinda cute, but it has the problem that if the value is defined, I get the value, which can be a subtle bug to track down.
anon
Just evaluate the expression in an empty environment then, with the metatable above set.
lhf