Scala関数式プログラミング_function&&method
2455 ワード
Scala関数式プログラミング_function&&method
FunctionとMethodの伝達性の違い
method--trait、class、objectでdefキーワードで宣言され、直接渡すことができません.
function--タイプはParamsType=>ResultTypeの変数で、これらの変数の背後にはFunctionNオブジェクトでカプセル化され、伝達されます.また、メソッドを関数に変換することもできます.
次のようにscala shellを起動します
変数increase(匿名関数で変数に値を付与)はfunction 1でカプセル化されていることがわかります.タイプはInt=>Intです.
次のように変数に付与される匿名関数です.
この2つの変数に割り当てられた匿名関数はfunction 3関数オブジェクトでカプセル化されており、そのタイプは(Int,Int,Int)=>Intである.
このようなパッケージの意味はその伝達性である.関数定義のパラメータが22個を超えると、以下のように関数オブジェクトにカプセル化されません.
implementation restricts functions to 22 parameters.
匿名関数のパラメータ数は22個より大きく,FunctionNでカプセル化することはできない.しかし、方法のパラメータは22個より大きくてもよい.
次のようにdefでメソッドを定義します.
パラメータの個数は24個です.
============END============
FunctionとMethodの伝達性の違い
method--trait、class、objectでdefキーワードで宣言され、直接渡すことができません.
function--タイプはParamsType=>ResultTypeの変数で、これらの変数の背後にはFunctionNオブジェクトでカプセル化され、伝達されます.また、メソッドを関数に変換することもできます.
次のようにscala shellを起動します
scala> val increase = (x: Int) => x + 1
increase: Int => Int = <function1>
scala> val increase = (x: Int) => x + 1
increase: Int => Int = <function1>
scala> val add = (x: Int,y: Int) => x + y
add: (Int, Int) => Int = <function2>
scala>
変数increase(匿名関数で変数に値を付与)はfunction 1でカプセル化されていることがわかります.タイプはInt=>Intです.
次のように変数に付与される匿名関数です.
scala> val add = (x: Int,y: Int,z: Int) => x + y + z
add: (Int, Int, Int) => Int = <function3>
scala> val add123 = (x: Int,y: Int,z: Int) => x + y + z
add123: (Int, Int, Int) => Int = <function3>
scala>
この2つの変数に割り当てられた匿名関数はfunction 3関数オブジェクトでカプセル化されており、そのタイプは(Int,Int,Int)=>Intである.
このようなパッケージの意味はその伝達性である.関数定義のパラメータが22個を超えると、以下のように関数オブジェクトにカプセル化されません.
scala> val add3 = (a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) =>
| a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x
<console>:7: error: implementation restricts functions to 22 parameters
val add3 = (a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) =>
^
scala>
implementation restricts functions to 22 parameters.
匿名関数のパラメータ数は22個より大きく,FunctionNでカプセル化することはできない.しかし、方法のパラメータは22個より大きくてもよい.
次のようにdefでメソッドを定義します.
scala> def add(a:Int,b:Int,c:Int,d:Int,e:Int,f:Int,g:Int,h:Int,i:Int,j:Int,k:Int,l:Int,m:Int,n:Int,o:Int,p:Int,q:Int,r:Int,s:Int,t:Int,u:Int,v:Int,w:Int,x:Int) = {
| a+b+c+d+e+f+g+h+i+j+k+l+m+n+o+p+q+r+s+t+u+v+w+x
| }
add: (a: Int, b: Int, c: Int, d: Int, e: Int, f: Int, g: Int, h: Int, i: Int, j: Int, k: Int, l: Int, m: Int, n: Int, o: Int, p: Int, q: Int, r: Int, s: Int, t: Int, u: Int, v: Int, w: Int, x: Int)Int
パラメータの個数は24個です.
============END============