1

私はclojure.lang.RT(clojure-1.4.0.jarを使用)を使用して、アプリケーションのエンドユーザーによって提供された多数のスクリプトを実行時に評価し、次のようなことを行っています。

return (Boolean) RT.var("clojure.core", "eval").invoke(RT.var("clojure.core", "read-string").invoke(script))

... と:

IFn fn = (IFn) RT.var("clojure.core", "eval").invoke(RT.var("clojure.core", "read-string").invoke(script))

varメソッドが静的であるとすると、上記のclojure.lang.RT APIの使用はスレッドセーフであると想定できますか

4

1 に答える 1

1

RT.var の呼び出しは、呼び出しているスクリプトと同じくらいスレッド セーフです。2 つのスクリプトを実行してそれぞれが呼び出しによって変数を変更したdef場合defn、2 つのスクリプトが変数の内容について相互に一貫性のないビューを取得する可能性があります。一般的に、これは安全である可能性が非常に高いです。

于 2013-02-26T18:49:16.140 に答える