問題タブ [groovyshell]
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.
groovy - setVariableを実行するときに、GroovyShellバインディングはオブジェクトへの参照を渡すことができますか?
オブジェクトをコピーする代わりに、Bindingオブジェクトがオブジェクトへの参照を格納する方法があるかどうか疑問に思っていますか?
残念ながら、「テスト」を出力します。
Groovyでそれを行う方法はありますか?
編集:
私が挙げた例は間違っていて、あまりにも単純すぎました。
あるスレッドでオブジェクトをインスタンス化し、別のスレッドでスクリプトを実行するため、問題が発生すると思います。
action
したがって、Testオブジェクトは1つのスレッドで作成され、Runnableオブジェクトへの参照として渡します。Runnableオブジェクトは、メソッドvalidate
を呼び出しafterTest
ます。setVariable
コンストラクターでの呼び出しをコメントアウトし、コメントを外すと、正常にvalidate
機能します。
並行性の「問題」である可能性はありますか?afterTestScriptでは、応答文字列を出力したいだけです。
scala - Groovy Script Engineで渡されたクラスのスーパークラスの変数にどのようにアクセスしますか?
scala からグルーヴィーなスクリプトを動的に実行しています。また、setProperty() を介して groovy スクリプトに渡されるクラスのインスタンスがいくつかあります。たとえば、TestA という名前のクラスがあり、クラス TestB がクラス TestA を継承しているとします。そして、クラス B のインスタンスをこのような groovy スクリプトに渡しています
groovy スクリプトを実行すると、TestB で宣言された変数にアクセスできます。しかし、TestBのスーパークラスであるTestAの変数にアクセスしようとすると、groovyは「クラスにそのようなプロパティはありません」というエラーを出します。
特定のインスタンスから TestA と TestB の両方のメソッドを呼び出すことができます。したがって、setter と getter を記述するだけで、TestA の変数にアクセスできますが、そうしたくありません。
セッター/ゲッターを使用せずにTestAの変数にアクセスする方法はありますか? Expandoなどを使用するのが好きですか?
grails - Grails アプリケーションにアップロードされた動的 Groovy
はい、ユーザーがコードを実稼働システムにアップロードする機能に伴うすべてのセキュリティ リスクを認識していますが、この質問のために、それが問題ではないふりをしましょう。
開発中の Grails アプリケーションでは、Grails アプリケーションで使用される Groovy コードと、顧客がダウンロードして使用する CLI をユーザーがアップロードできるようにする必要があります。
Groovy の埋め込みに関する次のドキュメントを認識しています。
その場で埋め込んで解釈するよりも良い方法はありますか? それともこれくらいですか?
groovy - groovy初心者-groovyシェルのメモリから変数を削除する方法
Groovyシェルのメモリから変数を削除する方法が見つかりませんでした...これは可能ですか?どうすればよいですか?BeanshellとJavascript(Rhino)でこれを行うためのメソッドを見ることができますが、Groovyでは見ることができません。
java - GroovyShell: 埋め込み実行
大規模な Java アプリケーションに groovy を埋め込もうとしています。
Java アプリケーションは、起動時にいくつかのユーティリティ Groovy スクリプトをロードする必要があります。
その後、アプリケーションは他のスクリプトを複数回実行する必要があります。また、GUI でコードを入力し、ユーザーの要求に応じて実行する必要もあります。
私が直面している問題はこれです:
次のように起動スクリプトをロードしています。
autoload.groovy に以下が含まれているとします。
これはうまくいきます。しかし、次を使用してユーザーコマンドを実行したい場合:
エラーが発生します:
groovy.lang.MissingMethodException: No signature of method: Script2.prnt() is applicable for argument types: (java.lang.Integer) values: [66]
ユーザー スクリプトは、既に読み込まれているメソッドにどのようにアクセスできますか?
注:「autoload.prnt 88」も試しましたが、それでもエラーが発生します。
grails - Grails でのランタイム スクリプトの評価 - ベスト プラクティス
私たちのアプリケーションでは、多数の電子メールがシステムから送信されています。これらの電子メールは、動的データを入力するさまざまなコンテキスト変数を使用して、すべてのユーザーに対して同じ形式でした。
現在、管理者がこれらのテンプレートを編集およびカスタマイズできるようにする機能を計画しています。そのため、Groovy シェルを使用して実行時にテンプレートを評価する計画があります。
これは私たちにとって十分に機能しているようです。私が持っている質問は次のとおりです。
- GroovyShell は使用するのに適したエンジンですか、それとも Rhino または他のエンジンの方が優れていますか?
- 注意すべきパフォーマンス上の問題やメモリの問題はありますか? 最適化できる簡単な方法、つまりシェルやバインディングを再利用できるもの
- 上記のコードの最大のボトルネックは何ですか? 建設?評価は?
ありがとう
groovy - groovsh で groovy に同梱されているライブラリをオーバーライドしますか?
Groovy には、さまざまなサードパーティ ライブラリが付属しています。servlet-api (v2.4) は groovy (v 2.0.1) の例です。
より新しいバージョンが必要だと仮定すると、それを達成するための推奨されるアプローチは何ですか?
groovy - GroovyShell1つのコンパイル済み文字列が別の文字列を呼び出します
このようにGroovyScriptを実行すると、次のようになります。
それはうまく機能します。問題は、「Square」関数もコンパイルしたいということです。私はこれを試しました:
しかし、それは機能しません。gs.parseによって返される「Script」オブジェクトがクロージャーのように機能しないためだと確信しています。ただし、2番目の文字列の構文を変更したくない場合は私はたくさんの解決策があるだろうと思いました...
何か案は?
編集:これを書いた後、2つの文字列を単純に連結して一度解析することが可能であることに気付きました。そのため、square()関数を使用するスクリプトを実行するたびに、「defsquare」というテキストを先頭に追加する必要があります。 (x){x * x)\n"スクリプトに..
私はこれを行うことができますが、それは少し薄っぺらなように見えるので、私はまだ他の答えを受け入れています。
compiler-errors - Groovy Shell に # 記号を読み込ませる方法
次のコードを groovy でコンパイルするのに問題があります。
}
これは、次のように関数を呼び出すときに実行する必要があるものです。
私が得るのはこの例外です:
この例外をしばらくグーグルで検索しましたが、この問題を解決する方法がわかりません。おそらく、誰かがすでに同様の状況を経験しており、これで私を助けることができます.
ありがとう。
java - 実行時に Groovy スクリプトを別の Groovy スクリプトにインポートする
このようなGroovyファイルがあります(現在)。
main.groovy
と呼ばれる別のグルーヴィーなファイルがあります
CommonFunctions.groovy
CommonFunctionsスクリプトをメインスクリプトに含めようとしていますが、ビルド時にスクリプトの場所がわかりません (つまり、スクリプト内の絶対ファイル パスまたは Java プロセスの絶対パスをどこに関連してハードコードすることはできません)。スクリプトは保存されます)。
私が知っているのは、スクリプトが一緒にあるか、呼び出し元のスクリプトに関連する場所(サブディレクトリなど)にあるということだけです。
呼び出しスクリプトの場所を見つけようとしましたが、エラーが発生しました
GroovyClassLoader.parseClass(File)メソッドを使用して実行時にメイン スクリプトにアクセスすることを考慮して、このスクリプトを参照するにはどうすればよいですか。