diff --git a/package/pika_lua/_pika_lua.c b/package/pika_lua/_pika_lua.c index 5bd5c12cf..0b195cccb 100644 --- a/package/pika_lua/_pika_lua.c +++ b/package/pika_lua/_pika_lua.c @@ -76,8 +76,6 @@ __exit: return ret; } -PikaObj* _pika_lua_require(PikaObj* self, char* module) {} - void _pika_lua___del__(PikaObj* self){ pika_debug("lua close!\r\n"); lua_close(g_pika_L); // 关闭 Lua 状态机,释放所有关联的资源 diff --git a/package/pika_lua/_pika_lua.pyi b/package/pika_lua/_pika_lua.pyi index a9bcfb9ae..72f6917b6 100644 --- a/package/pika_lua/_pika_lua.pyi +++ b/package/pika_lua/_pika_lua.pyi @@ -12,6 +12,4 @@ def evalLine(line: str) -> any: ... class LuaTable: pass -def require(module: str)-> LuaTable: ... - def __del__():... diff --git a/package/pika_lua/pika_lua.py b/package/pika_lua/pika_lua.py index 01cf1d409..853f32fbc 100644 --- a/package/pika_lua/pika_lua.py +++ b/package/pika_lua/pika_lua.py @@ -34,5 +34,32 @@ def eval(cmd: str): def evalLine(line: str): return _pika_lua.evalLine(line) -def require(module: str): - return _pika_lua.require(module) +def getVar(name: str): + # print("getVar: %s" % name) + return eval("return %s" % name) + +def setVar(name: str, value): + # print("setVar: %s = %s" % (name, value)) + eval("%s = %s" % (name, value)) + +class LuaModuleProxy: + _name:str = '' + def __init__(self, name: str): + self._name = name + + def __getattr__(self, name: str): + return getVar("%s.%s" % (self._name, name)) + + def __setattr__(self, name: str, value) -> None: + if (name == "_name"): + setattr(self, name, value) + else: + setVar("%s.%s" % (self._name, name), value) + +def require(module: str) -> LuaModuleProxy: + try: + eval("require('%s')" % module) + return LuaModuleProxy(module) + except: + print("require module '%s' failed" % module) + return None diff --git a/port/linux/package/pikascript/pika_lua.py b/port/linux/package/pikascript/pika_lua.py index 7eadb4b1c..853f32fbc 100644 --- a/port/linux/package/pikascript/pika_lua.py +++ b/port/linux/package/pikascript/pika_lua.py @@ -35,11 +35,11 @@ def evalLine(line: str): return _pika_lua.evalLine(line) def getVar(name: str): - print("getVar: %s" % name) + # print("getVar: %s" % name) return eval("return %s" % name) def setVar(name: str, value): - print("setVar: %s = %s" % (name, value)) + # print("setVar: %s = %s" % (name, value)) eval("%s = %s" % (name, value)) class LuaModuleProxy: