【问题标题】:How do I turn a string into an argument?如何将字符串转换为参数?
【发布时间】:2015-03-17 03:33:28
【问题描述】:

我正在使用 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()

【问题讨论】:

  • 到底是什么问题?

标签: string lua arguments lua-table


【解决方案1】:

假设您想要一个函数 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,手动索引表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() ) )

【讨论】:

  • 感谢您的建议,我稍后会尝试,并让您知道。不幸的是,没有 toargument() 就像有 tostring() 或 tonumber() 一样!
  • toargument() 没有多大意义,因为 Lua 中没有称为“argument”的类型。您可以将所有值作为参数传递给函数。您要做的是解释一段代码(这是一个string)并将其结果作为参数传递。
  • 不幸的是,它就像一张桌子一样工作。我应该说清楚,但 draw 是一个库,蓝色是它的颜色。所以 draw.blue 是图书馆的颜色。不过我可以使用手动颜色,所以谢谢!
最近更新 更多