在Lua中Stringify对象名称

时间:2011-07-23 13:20:40

标签: lua

在C中我可以做到:

#define S1(x) #x
#define S(x) S1(x)
#define foo(x) bar(x, S(x))

int obj = 3;
foo(obj);

void bar(int v, const char * name)
{
    // v == 3
    // name == "obj" 
}

我可以在Lua中做同样的事吗?

foo(barbar)

function foo(ob)
  -- can I get "barbar"?
end

3 个答案:

答案 0 :(得分:2)

我认为你只能通过使用类似于C预处理器代码的预处理器来做类似的事情。 (普通的C编译器也不能做那样的事情。)

或明确写出来:

foo(barbar, "barbar")

答案 1 :(得分:2)

你可以这样做,但正如DeadMG建议的那样:不要。

一种方式是:

function foo(bar)
    return bar
end

print(foo(bar)) -- prints nil

setmetatable(_G,{__index=function(t,k)
    if k:match"^_" then -- Don't use on system variables
        return nil
    else
        return k
    end
end})

print(foo(bar)) -- prints bar

但我强烈反对,因为这会产生令人讨厌的副作用。

答案 2 :(得分:0)

不,我不相信你能。使用这种方法一开始可疑。