如何将字符串转换为参数?

How do I turn a string into an argument?

我正在使用应用 TouchLua。

我需要将 table 中的字符串转换为参数。这是我想做 table 的唯一方法。

b = {}
b[1] = "010,010,draw.blue"

function drawButtons()
   for i = 1,2 do
      draw.fillrect(tonumber(string.sub(b[i],1,3)), tonumber(string.sub(b[i],5,7)), tonumber(string.sub(b[i],1,3))+10, tonumber(string.sub(b[i],5,7)),string.sub(b[i],9))
   end
end

drawButtons()

假设你想要一个函数 eval 使得 print( eval( "draw.blue" ) ) 大致等同于 print( draw.blue ),这里是一个快速而肮脏的版本:

local function eval( s, e )
  return assert( load( "return "..s, "=eval", "t", e or _G ) )()
end

-- global variable
draw = { blue = 2 }
print( draw.blue )
print( eval( "draw.blue" ) )

如果您使用的是比 5.2 更旧的 Lua 版本,您将需要 loadstring 而不是 load 和额外的 setfenv 调用。当然,除了使用 load,您还可以解析字符串 s 并手动索引 table e or _G

以上代码假设draw是一个全局变量。如果您希望代码使用局部变量,您需要使用调试库:

-- same for local variable
local localdraw = { blue = 3 }
print( localdraw.blue )

-- needs debugging information, so won't work with stripped bytecode!
local function locals()
  local t, i, n, v = {}, 1, debug.getlocal( 2, 1 )
  while n ~= nil do
    t[ n ], i = v, i+1
    n, v = debug.getlocal( 2, i )
  end
  return t
end
print( eval( "localdraw.blue", locals() ) )