はのは、この質問のために価値を創造してみましょう、最小限の機能を強調する:Scalaは
a.map(_*2)
:今
val a = 1 :: Nil
、私は無名関数は次のように簡略形式で書くことができることを実証することができますこの関数の省略形を書くことは可能ですか?:
a.map((x) => x)
私の解決策は動作しません:
a.map(_)
はのは、この質問のために価値を創造してみましょう、最小限の機能を強調する:Scalaは
a.map(_*2)
:今
val a = 1 :: Nil
、私は無名関数は次のように簡略形式で書くことができることを実証することができますこの関数の省略形を書くことは可能ですか?:
a.map((x) => x)
私の解決策は動作しません:
a.map(_)
あなたの最初の速記形態はまた、乗算は可換であることに
a map (2*)
感謝をポイントフリー書き込むことができます。
(x) => x
については、identity
機能が必要です。これはPredefで定義されており、一般的なので、型保証されていることを確認できます。
私はあなたが可換性を意味すると思います。 – Debilski
'x => x'は4文字で、' identity'は8文字です。これが私が決して「アイデンティティ」を使用しない理由です。 –
@debilskiこれはあなたが知っていることは簡単ではありません!キーボードにアクセスするための18ヶ月の戦いがあるときではない! –
このユースケースでは、identity
関数を使用する必要があります。
a.map(identity)
identity
は次のようにscala.Predefに定義されています。
implicit def identity[A](x: A): A = x
a.map(_)
は、x => a.map(x)
を表し、a.map(x => x)
ではないため、動作しません。これは、パラメータの代わりに1つの_
が部分的に適用された関数のを表すために発生します。 2*_
の場合、それは匿名関数の略です。これらの2つの用途は非常に密接なものであり、非常に一般的であり、それらによって混乱する。
あまり意味がありませんか?それは単なるNOPです。 – delnan
これは単なる例です。文脈で意味をなさなくすることができます – coubeatczech
これはScalaの '_'砂糖の過剰使用(imho)が本当に人々が言語を拾うのを困難にするケースの良い例です。 – akauppi