如何将字符串转换为参数?
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() ) )
我正在使用应用 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() ) )