2011-05-10 6 views
1

좋은 하루루아에 대한 테이블 시뮬레이션

나는 루아 스크립트에 대한 C++ std :: map의 액세스를 제공하는 특정 작업이 있습니다. 원하는 스크립트 구문 글로브의 [ "태그"] = "값"또는 작은 방울 ("태그") = "값"연구

, 시도 luabind 구속력

std::string & glob(const std::string &tag) 
{ 
    static std::string value; 
    return value; 
} 

... 

luabind::module(&state) 
[ 
    def("glob", &glob, luabind::return_reference_to(result)) 
] 

하지만 스크립트의 실행 후 아래 1 :

glob("tag") = "asdasd" 
print(glob("tag")) 

오류 [문자열 "글로브 ("태그 ") ="asdasd "..."] 가지고 예기치 않은 기호 근처 '='그래서

을, 당신의 제안을 기다리고 및 의견.

감사

업데이트 2lhf : 전역 변수 데이터가 저장 및 C++ 부분을 통해 연재하고있다는 루아에서 액세스 할 수 있습니다. luaState는 스크립트 실행마다 생성되며 실행 사이에는 존재하지 않습니다. 해결책 중 하나는 스크립트 실행 전에 전역 변수 테이블을 작성하고 채우고 실행 후 맵과 동기화하는 것입니다.하지만 느린 것 같습니다. 그래서, 언급 한 문법으로 c-function을 통한 액세스가 인정 될 것입니다.

답변

3

glob("tag") = "asdasd"은 유효한 Lua 구문이 아니기 때문에 절대로 작동하지 않을 수 있습니다. glob["tag"] = "value" 일할 수 있습니다. glob색인newindex 메타 메소드로 사용자 데이터로 설정해야합니다. 루아 바인드에 대해서는 아무 것도 모릅니다. 그래서 당신을 도울 수 없습니다. 그러나 표준 Lua API를 사용하여이를 수행하는 것은 어렵지 않습니다. 난 궁금해. 루아가 뛰어난 연관 배열을 이미 가지고있을 때 지도을 루아로 내보낼 필요가있다.

+0

내 게시물의 업데이트 섹션을 참조하십시오. – Orange

0

그래, metatable 규칙. ,

그냥 샘플

lua_createtable(&state, 0, 0); 
lua_pushcfunction(&state, &getValue); 
lua_setfield(&state, -2, "__index"); 
lua_pushcfunction(&state, &setValue); 
lua_setfield(&state, -2, "__newindex"); 
lua_setmetatable(&state, -2); 
lua_setglobal(&state, "global"); 

일부 C 코드 GET을 삽입했다 그리고 모든 것이 잘 작동 감사

하지만, 여기에 또 다른 질문은 다음과 같습니다 lua_setfield에 내가 인덱스를 사용해야하는 이유 == -2 lua_setmetatable?

+0

테이블이 가능합니다. 즉, 스택이 위에서 아래로 두 자리 위치에 있습니다. – lhf

관련 문제