Stringify имя объекта в Lua - PullRequest
       0

Stringify имя объекта в Lua

2 голосов
/ 23 июля 2011

В CI можно сделать следующее:

#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 ]

2 голосов
/ 25 июля 2011

Вы могли бы сделать это, но, как предложил 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 голосов
/ 23 июля 2011

Я думаю, что вы могли бы сделать нечто подобное, только используя препроцессор, который делает что-то похожее на ваш код препроцессора C.(Обычный компилятор C тоже не может сделать что-то подобное.)

Или написать это явно:

foo(barbar, "barbar")
0 голосов
/ 23 июля 2011

Нет, я не верю, что ты можешь. Использование такого сомнительно для начала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...