我有一个Lua脚本,它接收字符串中的函数调用。我需要执行该调用,并将输出作为变量中的字符串检索,以便稍后将其发送到某个地方。
例如,我将接收字符串"json.encode('{1:1, 2:3, 5:8}')"
。我想执行它并获得一个值为ret = json.encode('{1:1, 2:3, 5:8}')
的变量。
我尝试过以多种不同的方式使用loadstring,包括我在文档中找到的一种方式,但我无法让它按我想要的方式工作:
> s = "json.encode('{1:1, 2:3, 5:8}')"
> ret = assert(loadstring(s))()
> print(ret)
nil
我知道字符串正在执行,因为如果我设置s = print(json.encode('{1:1, 2:3, 5:8}'))
,我就会看到输出。我只是不知道如何获得变量的输出。
谢谢!
我刚刚找到了一种方法来做我想做的事情,但我仍然想知道你们是否能找到任何缺陷/更好的方法来做,因为我对Lua:很陌生
> s = "json.encode('{1:1, 2:3, 5:8}')"
> s2 = "return("..s..")"
> ret = assert(loadstring(s2))()
> print(ret)
"{1:1, 2:3, 5:8}"
您需要从加载的区块中返回值。事实上,你告诉lua你不在乎返回的值,所以它就把它扔掉了。
注意:我手头没有json模块,所以我用一个只返回其参数用于演示的函数替换了这个函数:
> json = { encode = function(s) return s end }
> s = "json.encode('{1:1, 2:3, 5:8}')"
> ret = assert(loadstring("return "..s))()
> print(ret)
{1:1, 2:3, 5:8}