在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)
  -- 能否获取到 "barbar"?
end

原文链接 https://stackoverflow.com/questions/6800648

点赞
stackoverflow用户600500
stackoverflow用户600500

我认为你可以通过使用类似于你的 C 预处理器代码的预处理器来做类似的事情。(普通的 C 编译器也无法做到这一点。)

或者明确地编写:

foo(barbar, "barbar")
2011-07-23 13:27:50
stackoverflow用户298661
stackoverflow用户298661

不,我不相信你能。这样使用本来就是可疑的。

2011-07-23 13:40:13
stackoverflow用户513763
stackoverflow用户513763

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

一种方法是:

function foo(bar)
    return bar
end

print(foo(bar)) -- 打印nil

setmetatable(_G,{__index=function(t,k)
    if k:match"^_" then -- 不要用于系统变量
        return nil
    else
        return k
    end
end})

print(foo(bar)) -- 打印bar

但是我强烈反对这种做法,因为它可能会产生严重的副作用。

2011-07-25 09:13:10