2

lua から C 関数に渡された引数の数を知るにはどうすればよいですか?

以下は機能しますか?

int test(lua_State *l) {
  int result = 0;
  int n=1;
  while(!lua_isnil(l,n)) {
    result = result + lua_tointeger(l, n);
    ++n
  }

  lua_pushnumber(l, result);
  return 1;
}

注: これは本質的に、保持する価値があると私が考えた所有者によって削除された質問の復活です。

4

1 に答える 1

3

すべての引数は lua スタックにプッシュされるだけなので、スタックの初期サイズを調べることで要素の数を取得できます。そのための呼び出しはlua_gettop(L).

したがって、コードはおおよそ次のようになります。

int test(lua_State *l)
{
  int result = 0;
  int nargs = lua_gettop(l);
  for(int i=1; i<=nargs; ++i)
  {
    result += lua_tointeger(l, i);;
  }

  lua_pushnumber(l, result);
  return 1;
}

最初に記述されたコードの問題は、null 引数を正しく処理できないことです。たとえばtest(1,nil,3)、4 ではなく 1 を返します。

于 2013-02-01T03:23:46.030 に答える