2009-09-16 4 views

답변

6

나는 userdata를 반환하는 것이 좋습니다. 접근 방식에 관계없이 포인터 을 C++ 데이터 또는 실제 C++ 데이터 자체에 넣어야하며 테이블을 사용하여이 작업을 수행하는 데는 아무런 문제가 없습니다. 하나는이 기능을 지원하는 추가 아무것도 할 보내고없이 그들이 추가 속성을 루아에 '주석'할 수 있기 때문에

반환 테이블은, 어떤 상황에서 의미가있다. 불행하게도 C++ 객체 포인터 은 어딘가로 가야하고, 테이블 자체의 실제 엔트리보다 다른 으로 갈 수는 없습니다.

매우 안전한 곳이 아닙니다. 루아 코드에서 찾을 수 있으며 제거되거나 대체되었습니다. 이것은 우연히 또는 목적 일 수 있습니다. 실제로 중요하지 않습니다.

그래서 내 선호도는 userdata 객체를 반환하는 것입니다. 그들은 이 테이블처럼 작동하도록 만들 수 있지만 에는 C++ 개체 포인터가 저장 될 수있는 "비밀"영역 (실제 사용자 데이터 자체)이 있으며 루아 코드로 덮어 쓰지 않아도됩니다.

(유저 데이터에는 유저 데이터 페이로드 자체로서,이 값은 루아 코드에 액세스 할 수있다. 객체 별 데이터를 저장하는 다른 곳에있는 "환경"의 포인터를 가지고 목적 및 손상 될 수없는 way).

+0

userdatas에는 __gc 메타 메서드가 바인딩되어있어 루아가 더 이상 참조되지 않을 때 루아에서 수집하도록 처리 할 수 ​​있습니다. – Ignacio

+0

좋습니다. 고마워요! –