Scala では、関数の適用は左側に関連付けられ、関数型は右側に関連付けられます (scala コース第 2 週)。わかりません。誰でも説明できますか?
「関数適用」と「関数型」の違いは何ですか?
Scala では、関数の適用は左側に関連付けられ、関数型は右側に関連付けられます (scala コース第 2 週)。わかりません。誰でも説明できますか?
「関数適用」と「関数型」の違いは何ですか?
一般に、結合性 (左または右) は、ある表記法(演算子) の事前定義されたプロパティであり、チェーン内でこの表記法を複数回使用する式をどのように読み取るべきかを示します。
たとえば、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
タイプの関数です。String
Int
さて、疑問が生じString => Int => Float
ます。String
toからの関数を引数として取り、Int
を返す関数Float
ですか? それとも、からから関数を受け取ってString
返す関数ですか?Int
Float
言い換えれば、またはと読むべきString => Int => Float
です(String => Int) => Float
かString => (Int => Float)
?演算子が左結合の場合=>
、それは(String => Int) => Float
. 右結合ならString => (Int => Float)
.
私たちが知っているように、=>
は右結合です。つまり、String => Int => Float
は と等価であり、 を受け取って返す別の関数を受け取って返すString => (Int => Float)
関数の型を示します。String
Int
Float