C++ 코드에서 :때 루아에서 호출 정의되지 않은 기능
class CWindowUI {
public CWindowUI(const char* title,int width,int height);
.....
};
static int CreateWindow(lua_State *l)
{
int width,height;
char *title;
CWindowUI **winp, *win;
name = (char *) luaL_checkstring(l, 1);
width= lua_tounsigned(l, 2);
height= lua_tounsigned(l, 3);
win = new CWindowUI(title,width,height);
if (win == NULL) {
lua_pushboolean(l, 0);
return 1;
}
winp = (CWindowUI **) lua_newuserdata(l, sizeof(CWindowUI *));
luaL_getmetatable(l, "WindowUI");
lua_setmetatable(l, -2);
*winp = win;
return 1;
}
루아 코드에서 :
local win = CreateWindow("title", 480, 320);
win:resize(800, 600);
지금 내 질문은 :
기능 CreateWindow
라는 이름의 객체를 반환합니다 win
이고 기능은 resize
입니다. 루아에서 정의되지 않은 함수를 호출 할 때 어떻게 알림을 받습니까?
통지에는 "resize"
문자열과 800,600
인수가 포함되어야합니다. 정의되지 않은 함수를 콜백 함수에 매핑하기 위해 소스를 수정하고 싶지만 올바르지 않습니다.
* .lua 파일을 컴파일 할 때 lua는 C 함수를 "__index"와 같은 lua 함수에 매핑하기 위해 해시를 사용하므로 정의되지 않은 함수를 기본 함수로 매핑 할 수있는 해쉬 부분을 수정하려고합니다. 내가 그것을 얻을 수있는 기본 기능을 설정할 수 있습니다. – tfzxyinhao
"* .lua를 컴파일하면"무엇을 의미합니까? 루아 코드는 컴파일되지 않지만 해석/실행됩니다. 표현식/호출 "win : resize (800, 600)"의 호출이이 시점에 발생하면 코드 실행이이 시점에 도달합니다. – lipp
@tfzxyinhao : "* lua는 C 함수를"__index "와 같은 루아 함수에 매핑하기 위해 해쉬를 사용합니다. *"No * 당신은 저수준이라고 생각합니다. "해시"등을 생각하지 마십시오. 값에 매핑되는 테이블, 키가 있습니다. 그것이 어떻게 구현되었는지는 부적합합니다. 중요한 것은 루아가 테이블 인 것처럼 루아가 사용자 데이터에 접근하려 할 때, 루아는 그 userdata에 대해'__index' 메타 메소드를 호출 할 것입니다. 루아가 전화를 걸기위한 적절한 함수를 돌려주는 것은 당신의 일이다. 기간. 해시도없고 알림도 없습니다. 그냥 함수를 반환합니다. –