Scala Tutorialsを読む 12 Anonymous Functions

今日は Scala Tutorials の12 Anonymous Functions を読みます。 AnonymousっていうとFTP接続する時とかに名前無しでログインするのに使ったりする名無しって意味があるよね。

Anonymous functions in Scala are of the following forms: Scalaでの無名関数は以下のような形式です:

(x:Int) => x * x // 型は:例 Int => IntはIntを受け取りIntを返す
(x:Int,y:Int)=>x+y // 型は (Int,Int) => Intで2つのIntを受け取りIntを返す例

Which is basically a "syntactic sugar" for this form: これは基本的に以下の形式のシンタックスシュガーです:

new Function1[Int,Int] {
  def apply(x: Int): Int = x * x
new Function2[Int, Int, Int] {
  def apply(x: Int, y:Int): Int = x + y

Type 型

The type of the 2nd anonymous function is (Int, Int) => Int and reads: "A function that map from two integers (Int, Int) to (=>) an integer (Int)" 2番目の無名関数の型は(Int, Int) => Intで"関数は2つの整数(Int,Int)から(=>)整数(Int)への写像である"と読みます。 The method doWithOneAndTwo expects a parameter of that type doWithOneAndoTwoメソッドはその型のパラメータを期待しているので我々はパラメータとして(x, y) => x + yを渡すことができます。

Parameter type inference 引数型推論

Note that we were able to drop the type declarations for x and y here, 我々はここのxとyから型宣言を取り外す事が可能であることに注意してください、なぜならばコンパイラdoWithOneAndTwoは2つのIntパラメータを受け取る関数を期待している事を既に知っているからです 、つまり我々は左の例の2つ目の例の呼び出しで型情報をxとyのパラメータを省略出来ます。

Shorter syntax 短い構文

Furthermore, there is even a shorter syntax for anonymous functions, 追加機能で、無名関数の短い構文があります,

(with a limitation that each variable is used exactly once). (制限ありで、関数本体中で各変数が正確に1回ずつ使われている場合)。

A place holder is used _ to replace each parameter, 各パラメータの置き換えるプレースホルダーは_が使われ、

the first occurrence of _ stands for the first parameter, 最初の_の出現は最初のパラメータを表し、 the second for the second parameter and so forth. 2つ目は2つ目のパラメータを等と表します。

See Also opens in new page 新しいページを開いて参照

  • More one anonymous functions
  • 無名関数の詳細

今日は長かったー。 明日も分量が結構あります。単語の意味を調べときましょう。

  • roughly 大雑把
  • briefly 簡潔に
  • However しかしながら,けれども,とはいえ


To be continued 13 Anonymous Functions 2.