2013-02-01 3 views
2

루아에서 C 함수에 전달 된 인수의 수를 어떻게 알 수 있습니까?루아에서 여러 인수를 받아들이는 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; 
} 

참고 :이 본질적으로 내가 보관 가치라고 생각 소유자에 의한 question deleted의 부활이다.

답변

3

모든 인수가 루아 스택 에 푸시됩니다. 따라서 스택의 초기 크기를 찾아 요소 수를 얻을 수 있습니다. do 할 전화는 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을 반환합니다.

+0

val은 선언되지 않았기 때문에 실제로 필요하지 않습니다. – lhf

+0

@lhf 동의 함. 나는 그것을 제거했습니다. 일반적으로 그런 종류의 문제에 대해서는 코드를 고칠 수 있습니다 (평판이 충분할 경우). –

관련 문제