루아 C API를 사용하여 테이블을 다른 테이블로 옮기려고합니다. 예를 들면,이 구조를 갖는 테이블을 가지고C api에서 lua 테이블 이동하기
I는 아래로,이 테이블 D를 이동할a[b][c][d][e] = value
A [B], 내가 좋아 루아 달성 할 수있는 :
a[b][d] = a[b][c][d]
a[b][c][d] = nil
내 전류 방법은 스택에 적재되는 A는 [B] [C]는 [D 표는 스택과 같다 : 그래서
Index Value
-1 d table
-2 c table
-3 b table
-4 a table
그럼 넣 [B] 보이는 스택에, 그래서 같은
그러면 스택 상 D의 키를 넣고, 표 D 미만 D의 키 및 테이블 B를 삽입하므로 스택은 :
Index Value
-1 d table
-2 d key
-3 b table
-4 a table
-5 c table
-6 b table
-7 a table
는 그럼 (-3 L), (B)가 수행 lua_settable 사용 [d] = d.
이 방법은 테이블이 아닌 키에는 적용되지만 테이블 인 키에는 적용되지 않습니다. 그래서 같은 실패합니다 :
a[b][c][{}][d] = value
a[b] = a[b][c][{}][d]
주, 나는 위의 키가 새 루아 테이블을 것이기 때문에 위에서 주어진 루아에 실패합니다 알고, 난 그냥 그것을 설명하기 원했다.
나는 행운도없이 테이블 부모 (그래서 [b] = b, lua_setglobal (L, a))를 수행하려고 시도했다. 아무도 내가 여기서 잘못 가고 있다는 것을 알고 있습니까?
편집 : 키/값을 스택에 밀어 넣는 방법에 대한 작은 코드 스 니펫. 문제는 테이블이 있었다
일부 메타 테이블을 가지고 : 목표는 여기 (I 코드에서 호출 또는 그것을 reparent)해결책 다른 하나 개의 테이블 구조에서 테이블을 이동하는 것입니다 함수를 사용하여 테이블을 변경하지 못하게했습니다 (본질적으로 스크립트 작성자는 구조가 중요한 구성 테이블을 가지고 있으므로이 문제가 발생합니다).
'lua_getfield' 대신'lua_getglobal'을 사용하십시오. – lhf
@lhf 알겠습니다. 고마워요. 그리고 LUA_ENVIRONINDEX가 루아 5.2에서 삭제 된 것을 볼 수 있습니다. –
여전히 작동하지 않습니다. 차이가있을 수 있지만 테이블의 키 중 하나는 실제로 다른 테이블입니다. 테이블 키가있는 테이블이 없으면 모든 것이 잘 작동합니다. 필자는 테이블에 f = {};와 같은 참조가 없을 수도 있기 때문에 lua2c에서 이것을 반복하는 방법을 모르겠습니다. a [f] = {}. [{}] = {}처럼 끝났기 때문에 스택의 테이블 키를 얻기 위해 luaL_ref를 사용해야합니다. – Chrismit