1

次のことを行う Java コードをいくつか継承しました。

1) Clojure から LazySeq オブジェクト (多数の PersistentHashMap オブジェクトで構成される) を受け取る

2) 次に、この同じ LazySeq オブジェクト (変更なし) を Clojure スクリプトに戻し、そこで String に変換して Java に戻します。

問題は、手順 (1) の後と手順 (2) の前に Java コード内で、LazySeq 内の PersistentHashMap オブジェクトの一部を変更してから、手順 (2) に進む必要があることです。何かのようなもの:

LazySeq seq = clojureFunctionReturningLazySeq();

//update the elements of the sequence

String result = clojureFunctionReceivingLazySeq(seq);

Clojure スクリプト自体を変更することはできず、LazySeq の更新は Java コード内で行う必要があります。LazySeq API を確認しましたが、要素を変更 (または追加) する方法が見つかりません。

ありがとうございました、

クリス

4

1 に答える 1

0

簡単な答え:できません。LazySeqそしてPersistentHashMapClojureでは不変です。

より長い答え:一般に、Clojure コードは、受け取るリスト オブジェクトの正確な種類についてほとんど想定していません。ほとんどのISeq場合、他の Clojure 型を気にしたくない場合は、実装するのはかなり簡単です。

ISeqしたがって、変換されたを実装して返すPersistentHashMapクラスを作成する必要がありますLazySeq。そのクラスをインスタンス化し、clojureFunctionReceivingLazySeq(seq)代わりにに渡します。

于 2015-03-18T06:43:43.247 に答える