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

我正在使用 TouchLua 应用程序。

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

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()
点赞
用户3677376
用户3677376

假设您需要一个函数 eval,使得 print( eval( "draw.blue" ) ) 大致等同于 print( draw.blue ),那么这里是一个快速而不完美的版本:

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

-- 全局变量
draw = { blue = 2 }
print( draw.blue )
print( eval( "draw.blue" ) )

如果您使用的是一个早于 Lua 5.2 的版本,则需要使用 loadstring 而不是 load,并且额外调用 setfenv。当然,您也可以手动解析字符串 s 并手动索引表 e or _G,而不必使用 load

上述代码假设 draw 是全局变量。如果您想让代码与局部变量一起使用,您需要使用调试库:

-- 对于局部变量也是一样的
local localdraw = { blue = 3 }
print( localdraw.blue )

-- 需要调试信息,因此无法与剥离的字节码一起使用!
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() ) )
2015-03-17 10:57:36