2014-05-11 5 views

답변

8

당신은에서 newproxy

생각 될 수있다 http://lua-users.org/wiki/HiddenFeatures

newproxy는 루아 기본 라이브러리에서 지원되지 않는 및 문서화되지 않은 기능입니다. 루아 코드에서 setmetatable 함수는 테이블 유형의 객체에만 을 사용할 수 있습니다. newproxy 함수는 제한을 우회하여 zero-size 사용자 데이터를 만들고 new, 빈 메타 테이블 또는 newproxy 인스턴스의 메타 테이블을 사용하여 설정합니다. 그러면 Lua에서 metatable을 자유롭게 수정할 수 있습니다. 이것은 입니다. __len과 같은 특정 메타 메서드를 사용하는 루아에서 프록시 개체를 만드는 유일한 방법입니다.

IT는 newproxy 인스턴스가 무료가되면 콜백을 얻을 수있는 해킹, __gc 메타 메서드에 대한 유용했다.

이 기능은 Lua 5.1에 있었지만 5.2에서 제거되었습니다. 루아 5.2에서 __gc 메터 메소드는 0 크기의 테이블에 설정할 수 있으므로 newproxy에 대한 주된 기세는 사라졌습니다.

+0

감사합니다. – IllidanS4

2

실제로 루아에는 없습니다.

userdata 형식은 임의의 C 데이터를 루아 변수에 저장할 수 있도록 제공됩니다. ... 사용자 데이터 값 은 C API를 통해서만 Lua에서을 만들거나 수정할 수 없습니다. 이는 호스트 프로그램이 소유 한 데이터의 + 결성을 보장합니다.

link

당신이 호스트 C/C++ 응용 프로그램에서 luaVM을 포함하는 경우, 당신은 루아에 유저 데이터를 만들 수있는 몇 가지 기능을 내보낼 수 있지만, 그것은 좋은 방법이 아니다. UD는 Lua 스크립트를위한 블랙 박스로 설계되었습니다.