يقوم LuaJ بتحميل وظيفتين بنفس الاسم من اثنين من LuaScripts مختلفين

StackOverflow https://stackoverflow.com//questions/22073216

  •  23-12-2019
  •  | 
  •  

سؤال

لدي اثنين من برامج Lua النصية التي تحتوي على وظائف بنفس الاسم:

لواسكريبت أ:

function init() 
print( 'This function was run from Script A' )
end

لوا سكريبت ب:

function init() 
print( 'This function was run from Script B' )
end

أرغب في تحميل هاتين الوظيفتين باستخدام LuaJ في بيئة globals، بالنسبة لبرنامج نصي واحد عادةً ما أقوم بذلك على النحو التالي:

LuaValue chunk = globals.load(new FileInputStream(luaScriptA), scriptName, "t",
globals);
chunk.call();

سيؤدي هذا إلى تحميل الوظيفة init() إلى globals ويمكنني تنفيذ هذه الوظيفة من Java باستخدام:

globals.get("init").call();

تأتي المشكلة عندما أقوم بتحميل برنامج نصي ثانٍ، سيؤدي هذا إلى استبدال جميع الوظائف بنفس الاسم المعلن مسبقًا.هل هناك أي طريقة يمكنني من خلالها منع ذلك والتمييز بسهولة بين الوظيفتين؟على سبيل المثال شيء مثل:

globals.get("luaScriptA").get("init").call(); //Access the init function of script A
globals.get("luaScriptB").get("init").call(); //Access the init function of script B

يرجى ملاحظة أن البرنامج النصي يحتوي على وظائف أخرى أيضًا وهدفي هو تشغيل وظائف فردية داخل البرنامج النصي، وليس البرنامج النصي الكامل مرة واحدة. العمل على منصة JME.

هل كانت مفيدة؟

المحلول

ضع وظائفك في جدول

luascripta:

giveacodicetagpre.

luascriptb:

giveacodicetagpre.

ثم سوف تفعل

giveacodicetagpre.

نصائح أخرى

يقوم الكود الموجود أدناه بتحميل البرامج النصية في بيئتها الخاصة، والتي ترث من البيئة العالمية للقراءة ولكن ليس للكتابة.وبعبارة أخرى، يمكنك الاتصال print لكن كل منها يحدد خاصته init.ربما يتعين عليك القيام بشيء ما لاستخدامه في LuaJ، لكنني لا أعرف ما هو.

local function myload(f)
    local t=setmetatable({},{__index=_G})
    assert(loadfile(f,nil,t))()
    return t
end

local A=myload("luaScriptA")    A.init()
local B=myload("luaScriptA")    B.init()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top