2

我从 Python 来到 Lua。我正在使用 Lua C API。我想知道是否有一种标准方法可以将一些参数和使用信息与方法捆绑在一起,并将其与标准help()或类似的方法联系起来<method>.__doc__()

我的一些想法:

1)以某种方式将文档放入库元表中并让用户使用pairs()

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

2) 在无参数调用方法时打印一些使用信息。

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

有人可以指出“Lua-ish”的方向吗?

4

2 回答 2

2

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

没有。

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

您可以建立一个约定,如果方法名称是foo您存储文档foo_docs或类似的东西。

x.foo_docs = "returns the sum of three numbers"
function x:foo(a,b,c)
   return a + b + c
end

在没有参数的情况下调用方法时打印一些使用信息。

这将阻止您创建没有参数的方法。

有人可以指出“Lua-ish”的方向吗?

如果不知道您为什么需要它以及您希望它如何工作,这很难。要获得类似的东西,<method>.__doc__您可以将方法(即函数)转换为可调用表,这样您就可以对其进行索引并存储所需的任何元数据,但这会很丑陋并且需要为每个方法创建一个新表。例如,这将允许您将方法转换为可调用表:

local documentMethodMetatable = {}
function documentMethodMetatable.__call(t,...)
  return t.method(...)
end
function documentMethod(method, doc)
  return setmetatable({ method=method, doc=doc}, documentMethodMetatable)
end

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

local foo = {name="Donut"}
function foo:sum(a,b,c)
  print(self.name .. " says the sum is " .. (a + b + c))
end

foo.sum = documentMethod(foo.sum, "Receives three arguments and prints their sum.")

foo:sum(2,2,3)     --> call sum
print(foo.sum.doc) --> index sum to get docs
于 2012-06-06T06:03:36.727 回答
2

在 lua-users wiki 看到了这个解决方案,如果这就是你要找的?

于 2012-06-06T06:03:59.783 回答