問題タブ [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.

0 投票する
2 に答える
2095 参照

groovy - setVariableを実行するときに、GroovyShellバインディングはオブジェクトへの参照を渡すことができますか?

オブジェクトをコピーする代わりに、Bindingオブジェクトがオブジェクトへの参照を格納する方法があるかどうか疑問に思っていますか?

残念ながら、「テスト」を出力します。

Groovyでそれを行う方法はありますか?

編集:

私が挙げた例は間違っていて、あまりにも単純すぎました。

あるスレッドでオブジェクトをインスタンス化し、別のスレッドでスクリプトを実行するため、問題が発生すると思います。

actionしたがって、Testオブジェクトは1つのスレッドで作成され、Runnableオブジェクトへの参照として渡します。Runnableオブジェクトは、メソッドvalidateを呼び出しafterTestます。setVariableコンストラクターでの呼び出しをコメントアウトし、コメントを外すと、正常にvalidate機能します。

並行性の「問題」である可能性はありますか?afterTestScriptでは、応答文字列を出力したいだけです。

0 投票する
2 に答える
519 参照

scala - Groovy Script Engineで渡されたクラスのスーパークラスの変数にどのようにアクセスしますか?

scala からグルーヴィーなスクリプトを動的に実行しています。また、setProperty() を介して groovy スクリプトに渡されるクラスのインスタンスがいくつかあります。たとえば、TestA という名前のクラスがあり、クラス TestB がクラス TestA を継承しているとします。そして、クラス B のインスタンスをこのような groovy スクリプトに渡しています

groovy スクリプトを実行すると、TestB で宣言された変数にアクセスできます。しかし、TestBのスーパークラスであるTestAの変数にアクセスしようとすると、groovyは「クラスにそのようなプロパティはありません」というエラーを出します。

特定のインスタンスから TestA と TestB の両方のメソッドを呼び出すことができます。したがって、setter と getter を記述するだけで、TestA の変数にアクセスできますが、そうしたくありません。

セッター/ゲッターを使用せずにTestAの変数にアクセスする方法はありますか? Expandoなどを使用するのが好きですか?

0 投票する
1 に答える
248 参照

grails - Grails アプリケーションにアップロードされた動的 Groovy

はい、ユーザーがコードを実稼働システムにアップロードする機能に伴うすべてのセキュリティ リスクを認識していますが、この質問のために、それが問題ではないふりをしましょう。

開発中の Grails アプリケーションでは、Grails アプリケーションで使用される Groovy コードと、顧客がダウンロードして使用する CLI をユーザーがアップロードできるようにする必要があります。

Groovy の埋め込みに関する次のドキュメントを認識しています。

その場で埋め込んで解釈するよりも良い方法はありますか? それともこれくらいですか?

0 投票する
1 に答える
5128 参照

groovy - groovy初心者-groovyシェルのメモリから変数を削除する方法

Groovyシェルのメモリから変数を削除する方法が見つかりませんでした...これは可能ですか?どうすればよいですか?BeanshellとJavascript(Rhino)でこれを行うためのメソッドを見ることができますが、Groovyでは見ることができません。

0 投票する
1 に答える
1448 参照

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」も試しましたが、それでもエラーが発生します。

0 投票する
2 に答える
580 参照

grails - Grails でのランタイム スクリプトの評価 - ベスト プラクティス

私たちのアプリケーションでは、多数の電子メールがシステムから送信されています。これらの電子メールは、動的データを入力するさまざまなコンテキスト変数を使用して、すべてのユーザーに対して同じ形式でした。

現在、管理者がこれらのテンプレートを編集およびカスタマイズできるようにする機能を計画しています。そのため、Groovy シェルを使用して実行時にテンプレートを評価する計画があります。

これは私たちにとって十分に機能しているようです。私が持っている質問は次のとおりです。

  1. GroovyShell は使用するのに適したエンジンですか、それとも Rhino または他のエンジンの方が優れていますか?
  2. 注意すべきパフォーマンス上の問題やメモリの問題はありますか? 最適化できる簡単な方法、つまりシェルやバインディングを再利用できるもの
  3. 上記のコードの最大のボトルネックは何ですか? 建設?評価は?

ありがとう

0 投票する
2 に答える
281 参照

groovy - groovsh で groovy に同梱されているライブラリをオーバーライドしますか?

Groovy には、さまざまなサードパーティ ライブラリが付属しています。servlet-api (v2.4) は groovy (v 2.0.1) の例です。

より新しいバージョンが必要だと仮定すると、それを達成するための推奨されるアプローチは何ですか?

0 投票する
1 に答える
575 参照

groovy - GroovyShell1つのコンパイル済み文字列が別の文字列を呼び出します

このようにGroovyScriptを実行すると、次のようになります。

それはうまく機能します。問題は、「Square」関数もコンパイルしたいということです。私はこれを試しました:

しかし、それは機能しません。gs.parseによって返される「Script」オブジェクトがクロージャーのように機能しないためだと確信しています。ただし、2番目の文字列の構文を変更したくない場合は私はたくさんの解決策があるだろうと思いました...

何か案は?

編集:これを書いた後、2つの文字列を単純に連結して一度解析することが可能であることに気付きました。そのため、square()関数を使用するスクリプトを実行するたびに、「defsquare」というテキストを先頭に追加する必要があります。 (x){x * x)\n"スクリプトに..

私はこれを行うことができますが、それは少し薄っぺらなように見えるので、私はまだ他の答えを受け入れています。

0 投票する
1 に答える
438 参照

compiler-errors - Groovy Shell に # 記号を読み込ませる方法

次のコードを groovy でコンパイルするのに問題があります。

}

これは、次のように関数を呼び出すときに実行する必要があるものです。

私が得るのはこの例外です:

この例外をしばらくグーグルで検索しましたが、この問題を解決する方法がわかりません。おそらく、誰かがすでに同様の状況を経験しており、これで私を助けることができます.

ありがとう。

0 投票する
1 に答える
5815 参照

java - 実行時に Groovy スクリプトを別の Groovy スクリプトにインポートする

このようなGroovyファイルがあります(現在)。

main.groovy

と呼ばれる別のグルーヴィーなファイルがあります

CommonFunctions.groovy

CommonFunctionsスクリプトをメインスクリプトに含めようとしていますが、ビルド時にスクリプトの場所がわかりません (つまり、スクリプト内の絶対ファイル パスまたは Java プロセスの絶対パスをどこに関連してハードコードすることはできません)。スクリプトは保存されます)。

私が知っているのは、スクリプトが一緒にあるか、呼び出し元のスクリプトに関連する場所(サブディレクトリなど)にあるということだけです。

呼び出しスクリプトの場所を見つけようとしましたが、エラーが発生しました

GroovyClassLoader.parseClass(File)メソッドを使用して実行時にメイン スクリプトにアクセスすることを考慮して、このスクリプトを参照するにはどうすればよいですか。