2015-06-22 1 views
0

Я сделал пример с trive с сайта luaj .. LuaJ Я пытаюсь запустить функцию на текущем объекте который в настоящее время используется. но luaJ создает новый объект.LuaJ как запустить функцию на вызывающем объекте (LuaJ создает новый объект. Как этого можно избежать.)

Как я могу запустить функцию на текущем объекте, а не создавать новую.

cosidering следующий код ...

import org.luaj.vm2.Globals; 
import org.luaj.vm2.LuaValue; 
import org.luaj.vm2.lib.TwoArgFunction; 
import org.luaj.vm2.lib.ZeroArgFunction; 
import org.luaj.vm2.lib.jse.JsePlatform; 

public class luaTest extends TwoArgFunction { 

    public luaTest() {} 
    changeInt mytest=new changeInt(); 

    public LuaValue call(LuaValue modname, LuaValue env) { 
     LuaValue library = tableOf(); 
     library.set("countup", new countup(mytest)); 
     env.set("luaTest", library); 
     return library; 
    } 

    void run() { 
     Globals globals = JsePlatform.standardGlobals(); 
     mytest.setA(10); // Setting it 10 before calling the script 
     LuaValue chunk = globals.loadfile("script.lua"); 

     chunk.call(); 

    } 
    class countup extends ZeroArgFunction { 
     changeInt mytest; 
     public countup(changeInt a) 
     { 
      mytest=a; 
     } 
     public LuaValue call() { 
      return LuaValue.valueOf(mytest.countup()); 
     } 
    } 

} 

класс changeInt просто одна переменная ...

public class changeInt { 

    int a = 1; 
    public int countup(){ 
     return a++; 
    } 
    public void setA(int x) 
    { 
     a=x; 
    } 

} 

luaScript просто ..

require 'luaTest' 

print('count',luaTest.countup()) 
print('count',luaTest.countup()) 
print('count',luaTest.countup()) 

есть ли путь вокруг него.

+0

Что означает текущий объект, который в настоящее время используется? – immibis

+0

объект, из которого я назвал сценарий lua ... (luaTest) Я установил значение «a», которое является членом этого объекта, прежде чем я вызову скрипт. Я бы хотел, чтобы одна и та же переменная печаталась .... – BravoAlphaRomeo

ответ

0

Да, это было очень сложно для Java-программистов (я очень новичок в java). Я использовал Singleton pattern, и он решил проблему.