問題タブ [luaj]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
lua - LuaJ: Lua スクリプトで「require」関数を呼び出せません
このエラーの原因となっている奇妙なことをしている可能性が非常に高いです。
次の簡単な例は失敗します。
と
thingy.lua を実行すると問題ありません。test.lua を実行すると、次のエラーが表示されます。
これらのファイルは両方とも同じディレクトリに存在し、SciTE (Lua 5.1 を実行) を使用して両方のスクリプトをエラーなしで実行できます。パスの問題らしいので、package.pathをソースファイルの絶対パスに設定してみました。
注:既存の相対パス "?.lua" のために SciTE が成功していないことを確認できるように、追加ではなくパスを設定しました。
LauJ (自分のプログラムを使用) と SciTE の両方でテストしたところ、SciTE は test.lua を実行でき、LuaJ はまだ実行できないことがわかり、いつもと同じエラーが発生しました。
これを引き起こす可能性のある Java コードで、私がすべきこと (またはすべきでないこと) はありますか? 私は Lua スクリプトから Java へのアクセスに成功しましたが、他のLua スクリプトからはアクセスできませんでした。それらを含むスクリプトを手動で実行している限り、LuaJ のグローバル変数と関数にアクセスできます。
参考までに、スクリプトの実行に使用する Java コードを次に示します。
両方の関数で使用される「filename」変数は、ハウジング クラスのコンストラクターで作成されます。
更新: 問題が何であれ、LuaJ バージョン 3.0 に存在することがわかりました (私は JSE パッケージを使用しています)。3.0-alpha2 JAR ファイルを古い 2.03 JAR に置き換えたので、問題はなくなりました。古いバージョンの LuaJ を使用できるようになったことには満足していますが、それでも最新バージョンを使用したいと考えています。
ここにある LuaJ Readmeには、次のような記述があります。
require() が呼び出されると、最初にモジュールを LuaFunction を実装する Java クラスとしてロードしようとします。
およびリリースノートセクションの下:
3.0-alpha2
require() 経由でロードするときに、LibFunction の 2 番目の引数として環境を指定します
バージョン 3.0-alpha2 で追加されたので、これと関係があるのではないかと強く疑っていたので、バージョン 3.0-alpha1 (3.0-alpha2 を使用していた) をダウンロードして、動作することを期待しましたが、動作しませんでした。
java - Lua / Java / LuaJ - 無限ループとスレッドの処理または中断
LuaJ を使用して、ユーザーが作成した Lua スクリプトを Java で実行しています。ただし、戻らない Lua スクリプトを実行すると、Java スレッドがフリーズします。これにより、スレッドが中断できなくなります。Lua スクリプトを次のように実行します。
badscript.luaが含まれていますwhile true do end。
ゆるぎないループに陥っているスクリプトを自動的に終了させ、ユーザーが実行中に Lua スクリプトを手動で終了できるようにしたいと考えています。debug.sethookとpcallについて読んだことがありますが、それらを自分の目的に適切に使用する方法はわかりません。また、サンドボックスがより良い代替手段であると聞いたことがありますが、それは私の手の届かないところにあります.
この問題は、Java スレッドだけに拡張される可能性もあります。でスタックしている Java スレッドの中断に関する決定的な情報は見つかりませんでしたwhile (true);。
オンラインのLua デモは非常に有望でしたが、「悪い」スクリプトの検出と終了は、Lua ではなく CGI スクリプトで行われるようです。Java を使用して、Lua スクリプトを呼び出す CGI スクリプトを呼び出すことはできますか? ただし、ユーザーがスクリプトを手動で終了できるかどうかはわかりません。Lua デモ ソース コードのリンクを紛失しましたが、手元にあります。これは魔法の行です:
誰かが私を正しい方向に向けることができますか?
いくつかの情報源:
scala - LuaJ を Scala で使用する
LuaJ を Scala で使用しようとしています。ほとんどのことは機能します (正しく行えば、実際にはすべて機能します!) が、Scala のセッター実装のおかげで、オブジェクトの値を設定するという単純なタスクが信じられないほど複雑になっています。
スカラ:
ルア:
この Lua 関数を含むスクリプトまたは行を実行し、TestObject の強制インスタンスを myTestFunction に渡すと、LuaJ でエラーが発生します。LuaJ は値を直接記述しようとしており、Scala では暗黙的に定義されたセッターを経由する必要があります (恐ろしい名前 x_= を使用します。これは有効な Lua ではないため、関数として呼び出しようとしても Lua は解析されません)。 .
前述したように、独自のセッターを定義するか、@BeanProperty マークアップを使用するなど、これに対する回避策があります。簡単に書けるはずのコードをもっと複雑にしてしまうだけです。
ルア:
そのような割り当てのセッターを暗黙的に呼び出すように luaj を取得する方法を知っている人はいますか? または、おそらくそのようなことを実装するために、luaj ソース コードのどこを調べることができますか?
ありがとう!
java - LuaJ Java に lua 関数を追加
私はこの方法を知っています:
Luaj を使用して Java コードを実行する関数を _G に追加するにはどうすればよいですか?
しかし、そのリンクを使用すると、 などの機能を追加できますmath.abs(...)。ライブラリを使用せずに関数を追加したいだけで、箱から出してrequireすぐに使用できmyfunction()ます。
どうすればいいですか?
lua - luajava で整数型を強制する
LuaJavaを使用して整数型を強制する方法はありますか? LuaJ 3.0 beta 1(luaj-jse-3.0-beta1.jar)で、 のインスタンスを作成しようとしていますjava.awt.Color。Java API のコンストラクター ( JavaAPI )が利用可能であることを考えると、これがそのような問題になるとは思わないでしょう。整数をコンストラクターに強制的に入れることに興味がある理由は、利用可能なコンストラクターがまたはColorのいずれかの 3 つまたは 4 つの引数を取るためです。Lua の数値型はであるため、LuaJ (または LuaJava) はコンストラクターのバージョンを呼び出します。intfloatdoublefloat
最初はこれで問題ないと思っていたのですが、使ってみたらエラーメッセージが届いていることに気づきましたColor。値がコンストラクターに適切に渡されておらず、Colorオブジェクトは本質的に破損しており、識別可能なエラーはありませんでした (何もクラッシュせず、表示されませんでした)。
簡単な例を次に示します。
r = 1.0このコンストラクタにg = 0.2,を渡しb = 0.2てから print するとj_color、
出力で。実際、私は好きなものをrとであるg限りb = 0問題なく使用できますが、それ以外の場合は、痛みや苦しみが生じます。
他の誰かがこの問題に遭遇したかどうか知りたいです。解決しない場合は、LuaJ プロジェクトの PI に連絡し、報告します。
補足として、カスタムメイドの Java 関数を使用してColor. この問題が存在すること、および使用するコンストラクターを指定する方法があるかどうか、またはLuaJavaにdoubleではなく整数を使用するように明示的に指示する方法があるかどうかについて、私はより懸念しています。
アップデート
また、four-float コンストラクターを使用しようとしましたが、同じ問題が発生します。次のいずれかの値を渡すとalpha=0, 0.5, 1、コンストラクターは適切に機能します。それ以外の場合は、上記の結果が得られます。
lua - 2 つの異なる LuaScript から同じ名前の 2 つの関数をロードする LuaJ
同じ名前の関数を含む 2 つの Lua スクリプトがあります。
luaScriptA:
luaScriptB:
I would like to load both these functions using LuaJ into the globals environnment, for one script I usually do it as follows:
This will load the function init() into globals and I can execute this function from java with:
The problem comes in when I load a second script, this will overwrite all functions with the same name previously declared. Is there any way I can prevent this and easily distinguish between the two functions? For example something like:
Please note that the script contains other functions as well and my goal is to run individual functions within the script, not the complete script at once.Working on the JME platform.