2014-03-02 85 views
2

我試圖編譯Lua代碼有我想要調用,並得到了一些信息,但是當我在LuaValue對象使用的InvokeMethod,我得到這個錯誤Luaj嘗試索引? (函數值)

LuaError: attempt to index ? (a function value)

兩個功能代碼是我爲了方便創建LuaScript類中

這種方法首先被調用來編譯文件

public void compile(File file) { 
    try { 
     Globals globals = JmePlatform.standardGlobals(); 
     compiledcode = globals.load(new FileReader(file), "script"); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

然後這是用來從我的盧阿紙條調用函數getSameTiles牛逼

public Object invoke(String func, Object... parameters) { 
    if (parameters != null && parameters.length > 0) { 
     LuaValue[] values = new LuaValue[parameters.length]; 
     for (int i = 0; i < parameters.length; i++) 
      values[i] = CoerceJavaToLua.coerce(parameters[i]); 
     return compiledcode.invokemethod(func, LuaValue.listOf(values)); 
    } else 
     return compiledcode.invokemethod(func); 
} 

LuaError: attempt to index ? (a function value)發生在哪裏"getSameTiles"是作爲字符串傳遞的func

return compiledcode.invokemethod(func);錯誤這是我的Lua代碼

function getSameTiles() 
    --My code here 
end 

回答

1

這裏有一個需要固定幾個問題。

首先,在lua中,load()返回一個函數,然後您需要調用該函數來執行該腳本。

其次,腳本的作用是在全局表_G中添加一個函數。爲了調用該函數,您需要從Globals表中獲取函數並調用該函數。

下面的代碼執行此

Globals globals = JmePlatform.standardGlobals(); 

public void compile(File file) { 
    try { 
     globals.load(new FileReader(file), "script").call(); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
} 

public Object invoke(String func, Object... parameters) { 
    if (parameters != null && parameters.length > 0) { 
     LuaValue[] values = new LuaValue[parameters.length]; 
     for (int i = 0; i < parameters.length; i++) 
      values[i] = CoerceJavaToLua.coerce(parameters[i]); 
     return globals.get(func).call(LuaValue.listOf(values)); 
    } else 
     return globals.get(func).call(); 
}