5

Scala では、関数の適用は左側に関連付けられ、関数型は右側に関連付けられます (scala コース第 2 週)。わかりません。誰でも説明できますか?

「関数適用」と「関数型」の違いは何ですか?

4

1 に答える 1

10

一般に、結合性 (左または右) は、ある表記法(演算子) の事前定義されたプロパティであり、チェーン内でこの表記法を複数回使用する式をどのように読み取るべきかを示します。

たとえば、Scala での関数適用は のような式ですfun(param1, ...)。たとえば、次のように連鎖できますfun(a,b)()(g,h)((fun(a,b))())(c,d)そして、それが左結合であるという事実は、そのような式が (疑似コードで) と同等であることを意味します:

( ( fun applied to arguments a and b ) applied to no arguments ) applied to arguments c and d

Scala の関数型は、関数オブジェクトの型です。Scala には、そのような型を示すための固有の表記法があります。この表記は=>演算子を使用します。たとえば、引数として取り、 を返すString => Intタイプの関数です。StringInt

さて、疑問が生じString => Int => Floatます。Stringtoからの関数を引数として取り、Intを返す関数Floatですか? それとも、からから関数を受け取ってString返す関数ですか?IntFloat

言い換えれば、またはと読むべきString => Int => Floatです(String => Int) => FloatString => (Int => Float)?演算子が左結合の場合=>、それは(String => Int) => Float. 右結合ならString => (Int => Float).

私たちが知っているように、=>は右結合です。つまり、String => Int => Floatは と等価であり、 を受け取って返す別の関数を受け取って返すString => (Int => Float)関数の型を示します。StringIntFloat

于 2013-04-03T21:53:49.770 に答える