1

Intをにマップする無名関数を割り当てたいとします。Int

このように割り当てることができます

val double = (x: Int) => x * 2

またはこのように

val double: Int => Int = x => x * 2

どちらがより慣用的ですか?または、一方が他方よりも好ましい状況はありますか?

4

2 に答える 2

4

これはJavaの予約語であり、データ型(つまり、Java)との混同を促す可能性があるため、 2回呼び出します。いずれにせよ、どちらも実際には他よりも慣用的です。他のすべてが等しい場合、最初の形式の方が短く、必要に応じてタイプが自動的に修正されるため、最初のフォームをお勧めします(つまり、タイプを1か所で変更するだけで済みます)。それが重要であるが自明ではないと判断した場合、またはケースがより複雑で、適切な型推論を行うためにその情報が必要である場合は、2番目を優先します。実際、この単純な状況では、ケースを次のように記述します。doubleDoubledoublexFloatInt => Int

val twice = (x: Int) => x * 2
val twice: Int => Int = _ * 2

同じ長さになります。(最初のものはもうないので、私はまだ最初のものを好みます。変数を複数回参照する必要がある場合は、同じ形式を維持できます。)

于 2012-10-03T18:01:08.113 に答える
1

同僚の経歴にもよると思います。

2つ目は私にはもっとハスケルリッシュに見え、1つ目はもう少しジャワっぽく見えます。

また、2番目のものは実際にreturnタイプを指定します。これは、doubleがパブリックAPIの一部である場合に適していますが、最初のものはそれを推測するだけであり、実装が変更されたときに誤って変更される傾向があります。

于 2012-10-03T17:40:17.103 に答える