루아에서 새로운 사용자 데이터를 반환 할 수있는 네이티브 함수를 보았습니다. 그것이 존재합니까? 일반 Lua 스크립트에서 사용자 정의 사용자 데이터를 생성 할 수 있습니까?순수 루아에서 새로운 빈 사용자 데이터를 생성하십시오.
4
A
답변
8
당신은에서 newproxy
생각 될 수있다 http://lua-users.org/wiki/HiddenFeatures
IT는
newproxy
는 루아 기본 라이브러리에서 지원되지 않는 및 문서화되지 않은 기능입니다. 루아 코드에서setmetatable
함수는 테이블 유형의 객체에만 을 사용할 수 있습니다.newproxy
함수는 제한을 우회하여 zero-size 사용자 데이터를 만들고 new, 빈 메타 테이블 또는newproxy
인스턴스의 메타 테이블을 사용하여 설정합니다. 그러면 Lua에서 metatable을 자유롭게 수정할 수 있습니다. 이것은 입니다.__len
과 같은 특정 메타 메서드를 사용하는 루아에서 프록시 개체를 만드는 유일한 방법입니다.
newproxy
인스턴스가 무료가되면 콜백을 얻을 수있는 해킹,
__gc
메타 메서드에 대한 유용했다.
이 기능은 Lua 5.1에 있었지만 5.2에서 제거되었습니다. 루아 5.2에서 __gc
메터 메소드는 0 크기의 테이블에 설정할 수 있으므로 newproxy
에 대한 주된 기세는 사라졌습니다.
2
실제로 루아에는 없습니다.
당신이 호스트 C/C++ 응용 프로그램에서 luaVM을 포함하는 경우, 당신은 루아에 유저 데이터를 만들 수있는 몇 가지 기능을 내보낼 수 있지만, 그것은 좋은 방법이 아니다. UD는 Lua 스크립트를위한 블랙 박스로 설계되었습니다.userdata 형식은 임의의 C 데이터를 루아 변수에 저장할 수 있도록 제공됩니다. ... 사용자 데이터 값 은 C API를 통해서만 Lua에서을 만들거나 수정할 수 없습니다. 이는 호스트 프로그램이 소유 한 데이터의 + 결성을 보장합니다.
감사합니다. – IllidanS4