contentRainbowDevilsLandけんじの外部記憶です。kenjiメソッドオブジェクトのメンバーとして関数を定義するとメソッドになります。外部に公開しない関数として、privateな非公開メソッドがありますが、Scalaでは関数内だけで使用する関数内で定義する関数として、ローカル関数があります。先ほどのコードは次のようになります。}ローカル関数からは外側の関数のパラメータにアクセス可能なので、processLineのパラメータはlineだけになっています。一人前の存在としての関数Scalaの関数はfirst-classな関数です。literals)はあるクラスにコンパイルされ、実行時にインスタンス化すると値としての関数(functionvalues)になります。関数リテラルはソースコード上だけの存在で、関数値(値としての関数)はオブジェクトとして存在します。次はInt型を取り1加算する関数リテラルの例です。1値としての関数はオブジェクトなので、変数に格納することができます。変数に格納しても関数なので通常の関数のように呼び出せます。11関数に複数行コードを入れたい場合、中括弧で囲みます。その関数が返す値はブロック内の最終行の式が生成する値です。101Scalaの多くのライブラリは、この関数リテラルと値としての関数をうまく使えるよう設計されています。すべてのコレクションにはforeashメソッドが定義されており、foreachメソッドは関数をとってそれぞれの要素についてその関数を呼び出します。x))value=-11value=10value=0value=100コレクションについては17章で詳細に説明があります。関数リテラルのパラメータの型は省略可能です。Int)ですが、(x)と書けます。型推論が可能な場合はパラメータの括弧も省略できます。100)プレースホルダー構文もっと関数リテラルを簡潔に書くことができます。パラメータが関数リテラル内で一度しか使われない場合は、アンダースコアでパラメータを使うことができます。100)ただし、プレースホルダー構文を使うには型推論が可能である必要があります。型推論できない場合はエラーになります。_^そんな場合でも型を指定してあげるとOKです。上記のアンダースコアは個別のパラメータの代わりとなるものです。アンダースコアは他にも、パラメータ全体の代わりとして使うこともできます。パラメータ全体をアンダースコアに置き換えている。最初のパラメータをアンダースコアに置き換えている-11100100次の例では3つのパラメータの合計を返すsum関数を考えます。_とすると、0個のパラメータを部分適用した関数を返します。その自動生成された関数にパラメータを入れると元の関数を実行することができます。3)を実行していることになります。6次のようにしてパラメータの一部を埋めた状態で残りのパラメータを入力させる関数を作ることもできます。この場合1つのパラメータを取るapply関数を定義した関数オブジェクトを生成しています。6もしforeachのように、関数呼び出しが必要とされている部分ではアンダースコアさえも省略できます。someNumbers.foreach(println)-11100100関数呼び出しが必要とされている場所以外でこの記法を使うとエラーになります。今までは関数は関数のパラメータだけを参照していましたが、関数の外の変数を参照することも可能です。関数の外にも見つからなければエラーです。more変数が存在すれば参照可能です。variables)です。terms)と呼びます。開いた項は、関数リテラルから関数値を作成するときに自由変数の束縛をつかみ、閉じます。そのためその関数値をクロージャー(closure)と呼びます。クロージャーは自由変数の束縛をつかみます。値では無く変数をつかむので、クロージャー作成後の変数の変更は参照可能です。クロージャーの中で変数に対して変更を加えると、クロージャーの外にも影響します。99連続パラメータJavaで言う所の可変長引数です。関数のパラメータの型の後ろに*を付けることで連続パラメータとなります。“bar”)hogefugafoobar連続パラメータは関数内ではパラメータ型のArrayとなります。Arrayなのであれば連続パラメータとしてArrayを入力としてできそうですが、そのままではコンパイルエラーです。Stringecho(list)パラメータに_*の型を指定すると連続パラメータとして入力可能になります。通常関数の引数は、順番通りにパラメータに設定されます。y=20引数を指定する際にパラメータ名も指定すると、その順番を入れ替えることができます。y=10名前付き引数は次のパラメータのデフォルト値と一緒に使います。パラメータのデフォルト値Scalaではパラメータにデフォルト値を設定することができます。y=20一つ引数を指定すると、最初のパラメータのみ引数の値が設定されます。y=20二つ目の引数だけ値を設定したい場合は名前付き引数を使います。y=100末尾再帰Scalaは末尾再帰の最適化がされます。末尾再帰の最適化をしない場合はscalaシェル実行時かscalacでのコンパイル時に-g:notailcallsをしていします。Scalaの末尾再帰最適化は自分自身の関数を呼び出す際だけにされ、二つの関数を呼び合うような末尾再帰は最適化されません。値としての関数を呼び出す際にも末尾再帰されません。Replyコメントを投稿するには、下の計算の答えを入力する必要があります。答えは半角数字で入力してください。