2016-04-11 15 views
1

JNLuaのjavavm moduleを使用してJavaライブラリ(JAR)に接続して拡張する方法を試しています。これまでのところ、私は、JavaオブジェクトをルアとJava-seemlessnessの間を行き来するのがどれほど簡単かに感銘を受けました。JNLuaでJavaオブジェクトを拡張する方法

ここでは、これらのJavaオブジェクトをLUAで拡張したいと考えています。私の素朴なアプローチでは、私はそのオブジェクトAPIを拡張する意図、すなわちそれにメソッドを追加する目的で、JavaオブジェクトをLuaクラスでラップしました。しかし、私は、すべてのJavaオブジェクトメソッドをラッパー内に再作成する必要はありません。私は、Javaオブジェクトから継承することができるように思えるので、ラッパーからメソッドが見つからないときに、LuaはラップされたクラスのメンバーであるJavaオブジェクトでそのメソッドを探します。私はInheritanceに示されている例を適用しようとしましたが、Javaオブジェクトを扱っているので、設定するのはやや面倒です。思考?

答えて

0

私はSO私が必要私はUserDataのオブジェクトではなく、卓上で

  • メンバーを追加する方法を扱っていなかった実現するために必要な

    Add members dynamically to a class using Lua + SWIG

    1. に疑問を以下に私の答えを見つけましたいくつかのmetatable kung-fu

    以下のコードは、私にJavaオブジェクトの拡張(メソッドの追加)を許可するという効果があります。

      function Model:new (model) 
    
           o = {} 
    
           WrapObject(Model, o, model) 
    
           self.__index = self 
           self.model = model or nil 
           return o 
          end 
    
    
          function WrapObject(class, object, userData) 
    
           local wrapper_metatable = {} 
    
          function wrapper_metatable.__index(self, key) 
           local ret = rawget(class, key) 
           if(not ret) then 
            ret = userData[key] 
            if(type(ret) == "function") then 
             return function(self, ...) 
              return ret(userData, ...) 
             end 
            else 
             return ret 
            end 
           else 
            return ret 
           end 
          end 
    
           setmetatable(object, wrapper_metatable) 
           return object 
          end 
    
          function Model:Test() 
    
           name = self:GetFullName() 
           fileName = self:GetFileName() 
    
           ret = name .. fileName 
           print("It's a test!!") 
    
           return ret 
    
          end 
    
  • 関連する問題