Lua:获取功能源

 LES--T单身 发布于 2023-02-12 19:07

我正在开发一个用于序列化/反序列化的系统,我正在尝试使用函数来获得一些非常奇特的东西.我的目标是以人类可读和可逆的方式序列化包含函数的对象(序列化文件需要在loadfile()步骤之后进行处理).我需要一种方法来获取函数的实际来源,看起来我不能总是用debug.getinfo()来做.

我知道debug.getinfo()将给出定义它的文件和行(或函数的来源,具体取决于它的来源).有没有办法可以从该文件中读取函数文本?我愿意使用某种解析器实用程序来实现这一点.也许有用于解析Lua代码的Lua包?

也许有一种方法可以让loadfile()或require()在某处自动保留函数源?

是的,我知道你可以从debug.getinfo中获取各种信息,但它无法处理通过stdin加载的函数...

uberblah@glade-m:~$ lua
Lua 5.1.5  Copyright (C) 1994-2012 Lua.org, PUC-Rio
> a = function() print("hello, world!") end
> require("serpent")
> s = require("serpent")
> =s.block(debug.getinfo(a))
{
  currentline = -1,
  func = loadstring("LuaQ\000\000\000\000\000\000\000\000\000=stdin\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000A@\000\000@\000\000?\000\000\000\000\000\000\000\000\000\000\000print\000\000\000\000\000\000\000\000hello, world!\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000",'@serialized') --[[function: 0x2068a30]],
  lastlinedefined = 1,
  linedefined = 1,
  namewhat = "",
  nups = 0,
  short_src = "stdin",
  source = "=stdin",
  what = "Lua"
} --[[table: 0x206cf80]]
> f = io.open("stdin", "r")
> =f
nil

来自STDIN的源解决方​​案... 1)捕获所有STDIN,将其写入文件2)从该文件加载信息,而不是从stdin加载3)debug将跟踪该文件中的函数行号

1 个回答
  • 使用debug.getinfo你可以得到source,linedefinedlastlinedefined.除非您格式化您的代码,否则您应该能够从此信息中提取函数的完整代码.无需解析代码,只需获取正确的行集.

    2023-02-12 19:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有