Lua - 反射 - 函数参数和docstrings?

我从Python转到Lua。我正在使用Lua C API。我想知道是否有一种标准方法将一些参数和用法信息与方法捆绑在一起,并将其绑定到标准的 help()<method>.__doc__()-like 方法。

我考虑的一些想法:

1)在库元表中放置文档,并让用户使用 pairs()

static const luaL_Reg lua_mylib_funcs[] = {
    ...
    {NULL, NULL}};

2)在调用没有参数的方法时打印一些用法信息。

3)为库创建一个 .help().docs() 方法。

是否有人能指点一下“Lua-ish”方向?

点赞
用户501459
用户501459

我想知道是否有一种标准方法来将某些参数和使用信息与方法捆绑在一起。

没有。

以某种方式将文档放在库元表中,让用户使用pairs():

你可以建立一个约定,如果方法名称是“foo”,你可以将文档存储在“foo_docs”或类似的内容中。

x.foo_docs = “返回三个数字的总和”
function xfooabc)
   返回a + b + c
end

当没有参数调用方法时打印一些使用信息。

那将阻止你创建没有参数的方法。

有人能指出一个“Lua-ish”的方向吗?

很难说,因为不知道你为什么需要它以及你想让它如何工作。为了得到类似于<method>.__doc__的东西,你可以将方法(即函数)转换为可调用表,这将让你索引它并存储任何想要的元数据,但这将很丑并且需要每个方法创建一个新表。例如,这将让你将一个方法转换为可调用表:

local documentMethodMetatable = {}
function documentMethodMetatable.__call(t,...)
  返回t.method(...)
end
function documentMethodmethoddoc)
  返回setmetatable({ method = methoddoc = doc },documentMethodMetatableend

然后你可以写出这样的东西:

local foo = {name="Donut"}
function foo:sum(a,b,c)
  打印(self.name .. “表示总和为” ..(a + b + c))
end

foo.sum = documentMethod(foo.sum,“接收三个参数并打印它们的总和”)

foo:sum(2,2,3) - 的调用总和>打印(foo.sum.doc) - 索引总和以获取文档
2012-06-06 06:03:36
用户513763
用户513763

我在lua-users wiki中看到了这个解决方案,如果这正是你所寻找的,那么可以去看看。

2012-06-06 06:03:59