2012-06-28 1 views

답변

1

LuaJ docs을 간단히 살펴보면 Lua 함수를 나타내는 org.luaj.vm2.LuaFunction 개체를 얻어야하고 그 다음에 invoke 메서드를 적용해야합니다.

+0

마음이 더 정확합니까? 스크립트가로드 될 때 이외에 LuaFunction 객체를 가져올 방법이 전혀 없습니다 (작동하지 않으면 어떻게 메소드 자체를 호출 할 수 있습니까?) – PuppyKevin

+0

또한 [더 많이 검색하면 [http : //stackoverflow.com/questions/8956564/luaj-import-lua-methods)는 내가 가지고있는 것과 정확히 같은 질문이지만, 질문자는 그의 일을 끝내는 방법을 버리지 않았습니다. – PuppyKevin

+0

자바 개발자가 루아 라이브러리 기능을 해석/실행하기 위해 LuaFunction이 내부 용이므로 옳은 대답이라고 생각하지 않습니다. – Splash

1

는, 어쩌면 이것은 당신이 원하는 무엇

import org.luaj.vm2._ 
import org.luaj.vm2.lib.jse._ 

object Main extends App { 
    val global = JsePlatform.standardGlobals() 
    global.get("dofile").call(LuaValue.valueOf("test.lua")) 

    val args: Array[LuaValue] = Array(LuaValue.valueof(1), LuaValue.valueof(2)) 
    val retVals: LuaValue.Vararg = global.get("add").invoke(LuaValue.varargsOf(args)) 

    println(retVals.arg(1)) 
} 

test.lua :

,
function add(a, b) 
    a = a or 0 
    b = b or 0 
    return a + b 
end 

참고 : 코드를 테스트하지는 않았지만 제대로 작동해야한다고 생각합니다.

편집 :이 질문은 스칼라와는 아무런 관련이 없다는 것을 알지 못했습니다. (스칼라의 문제를 해결하려고 생각했습니다. 그러나 demon_ds1은 내 대답을 기반으로 한 Java 솔루션을 찾은 것 같습니다. 이제는 자신의 답변을주었습니다. 그래서이 혼란스러운 답변에서 좋은 점을 발견했습니다.

11

나는이 같은 문제를 해결하기 위해 둘러보고 있었고, 난이 Profetylen의 대답과 매우 비슷한 함께했다

test.java :

import org.luaj.vm2.LuaValue; 
import org.luaj.vm2.lib.jse.JsePlatform; 

public class test 
{ 
    public static void main(String[] args) 
    { 
     //run the lua script defining your function 
     LuaValue _G = JsePlatform.standardGlobals(); 
     _G.get("dofile").call(LuaValue.valueOf("./test.lua")); 

     //call the function MyAdd with two parameters 5, and 5 
     LuaValue MyAdd = _G.get("MyAdd"); 
     LuaValue retvals = MyAdd.call(LuaValue.valueOf(5), LuaValue.valueOf(5)); 

     //print out the result from the lua function 
     System.out.println(retvals.tojstring(1)); 
    } 
} 

test.lua :

function MyAdd(num1, num2) 
    return num1 + num2 
end