9

Clojure には「スレッド化マクロ」->->>. 同様の構成を Scala コードで使用して、次のようなコードを置き換えることができると確信しています。

var myObj = MyObject(x, y, z)
myObj = transform(myObj, abc)
myObj = transformMore(myObj, def)
myObj = transformYetMore(myObj, bar)

見栄えが良いかどうかを確認するために、実際の例を見てみたいです。Scala の場合、マクロを使用する必要はないと確信しています。

4

2 に答える 2

-1

clojure のスレッド化マクロは、過度にネストされた式の問題を解決するために使用されます。したがって、通常のコレクション関数は問題ないため、scala ではある種のスレッド化ユーティリティを使用することは非常にまれです (Stefan が述べたように、原則として可能ですが)。

def square(x: Int) = x * x
def plusOne(x: Int) = x + 1
List(1,2,3,4).map(square).map(plusOne)

または長いものでも:

someCollection.map(...)
              .flatMap(...)
              .filter(...)
              .map(...)
              ...

もう 1 つの選択肢は、理解のためのものです (オプションと先物には、はるかに便利です)。これに満足できない場合は、マクロを使用する必要はありません。そのような構造に関する多くのブログ投稿があります。たとえば、これ

于 2013-11-14T23:05:37.910 に答える