如何将 Lua 函数块转储为字符串?

如何将 lua 函数块转换为字符串?

function test(a, b)
  local c = a + b
  return c
end

print( type(test) )  --> function
print( test )         --> function: 0053B108
print( dumpToString(test) )

我希望 dumpToString 的结果如下所示:

function test(a, b)
  local c = a + b
  return c
end

如何实现?

=== update1 ===

我希望能够自动记录和注入代码。

点赞
用户734069
用户734069

你不能这样做。Lua没有在任何地方将编译后的Lua脚本存储为纯文本。由于它旨在成为一种小型脚本语言,它也没有提供将自己的字节码反编译的机制。

2013-02-06 03:51:28
用户1847592
用户1847592

你可以通过以下方式获取你程序的源代码:

local source_code = io.open(arg[0]):read'*a'

并且解析它以寻找你的函数定义。

这只能在从命令行运行 Lua 并将源文件作为参数传递时使用,不适用于字节码文件。

2013-02-06 07:14:22
用户1442917
用户1442917

你没有说明为什么你想要这样做,这可能很重要。你可以将一个函数转换成字符串,但这个字符串可能不是很易读;你可以通过这种方式存储和传输你的函数(在兼容的 Lua 引擎之间):

string.dump(function () print "Hello" end)
2013-02-06 16:58:58
用户2063684
用户2063684

嗯,您可以将多行代码存储在单个字符串变量中。只需使用双方括号而不是引号即可。

chunk = [[
function test(a, b)
  local c = a + b
  return c
end
]]
2013-02-12 06:32:14