2

Python から Lua に来ています。Lua C API を使用しています。いくつかのパラメーターと使用法に関する情報をメソッドにバンドルし、それを標準help()または<method>.__doc__()類似のメソッドに結び付ける標準的な方法があるかどうか疑問に思います。

私が持っていたいくつかのアイデア:

1) どうにかしてドキュメントをライブラリ メタテーブルに置き、ユーザーが使用できるようにしますpairs()

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

2) メソッドがパラメーターなしで呼び出されたときに、いくつかの使用情報を出力します。

3) ライブラリの.help()または.docs()メソッドを作成します。

誰かが「ルアっぽい」方向を指し示すことができますか?

4

2 に答える 2

2

メソッドにいくつかのパラメーターと使用法情報をバンドルする標準的な方法があるのだろうか

いいえ。

どういうわけか、ドキュメントをライブラリのメタテーブルに置き、ユーザーがpair()を使用できるようにします:

fooメソッド名がドキュメントを保存する場所などの規則を確立するだけfoo_docsです。

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

メソッドがパラメーターなしで呼び出されたときに、いくつかの使用情報を出力します。

これにより、パラメーターのないメソッドを作成できなくなります。

誰かが「ルアっぽい」方向を指し示すことができますか?

なぜそれが必要なのか、どのように機能させたいのかを本当に知らずに言うのは難しいです. <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 に答える