Lua - 如何在不使用loadstring的情况下序列化函数?

在 Lua 中,是否有可能将函数(不包括上值)序列化并将其存储而不使用 loadstring呢?

点赞
用户936986
用户936986

你可以使用 string.dump 对它们进行序列化和存储,完全不需要使用 loadstring。只有当你想要将它们反序列化回来时,才需要 loadstring

如果你需要重复使用实际的函数,(而不仅仅是用于比较等简单用途),你仍然需要至少访问字符串版本的 loadstring,因为它是唯一允许你动态评估 Lua 源代码的工具。

如果你可以访问它,你可以尝试:

  1. 如果你可以访问,修改 Lua 引擎本身,将函数定义的源代码保存在某个地方。
  2. 编写在 Lua 中将 Lua 字节码转换为 Lua 源代码的转换器。使用 Lua 的简单虚拟机,这并不像听起来那么困难。

如果你完全无法访问 loadstring,你可以尝试在 Lua 中编写 Lua 虚拟机。这会比编写简单的转换器更困难,但仍然十分可行。

2012-05-29 17:44:23