、..
が多少出て下落していますより汎用性の高い->
に置き換えられました。個人的に私は好む:
(-> (NutritionFacts$Builder. 240 8)
(.calories 100)
(.sodium 350)
(.carbohydrates 27)
(.build))
それは夫婦以上の文字ですが、あなたは二つのもの得る:
- 明示します。
.
がすぐそこにあるので、私はナトリウム線(例えば)を見て、それがJavaメソッド呼び出しだと言うことができます。
- 柔軟性。私が必要な場合は、途中で非メソッド呼び出しを連鎖させることができます(stdoutにそれを表示します)。または、この最後の部分で、他の関数呼び出しに送ります。
最も重要なのは、この質問に対する他のすべての答えはクラス名を間違っを得ている:JavaのNutritionFacts.BuilderはNutritionFacts $ビルダーという名前の本当のJVMクラス以上の言語糖であり、そのクラスは、Clojureのは、以来(参照しなければならないものです私たちはjavacを使ってコードをコンパイルしていません)。
私はdoto
提案に同意しません。このビルダークラスは、1つのインスタンスを変更してそれを返すことによって、メソッドチェーンを実装するためにのみ機能します。 doto
は、インプレースの突然変異を必要とするJavaオブジェクトには最適ですが、クラスが親切であってもそれが不変であると思われる場合は、メソッドチェインのバージョン(つまり->
)を使用してください。
唯一の理由です。 [doto](https://github.com/clojure/clojure/blob/f5f827ac9fbb87e770d25007472504403ed3d7a6/src/clj/clojure/core)に入れてください。clj#L3395)それは問題ありません! –
@Goran Jovicあなたが提案したコードを変更しました。ありがとう! –
うん、それだよ。 'doto'と' ..'の主な違いは、 'doto'は最初のフォームで定義された一つのオブジェクトのメソッドを呼び出し、' ..'は前のメソッドの結果を呼び出すことです。この場合、Javaメソッドは構築中のオブジェクトを返すので、同じです。 –