2011年9月3日土曜日

ScalaのAPIとプレースホルダー構文の関係についてわかったことをまとめてみた

Scalaのコレクションクラスなどで利用することができるプレースホルダ(「_」)について、ちょっと調べてみたのでまとめてみました。

  1. 簡単なサンプル
  2. 引数を2つ受け取る場合
  3. 型の異なる2つの引数を受け取る場合
  4. 外で作った関数をコレクションのメソッドに渡す場合

まずはfilterメソッドによる簡単なサンプル

省略しないと

省略すると

クラスのリストでも同じことができます。

filterメソッドのようにメソッドに渡す関数が引数をひとつしか受けない関数を前提としている場合、プレースホルダを2回利用することはできません。
下記のサンプルはコンパイルエラーになります。
このような場合は、必ず
という書き方をしなければなりません。

メソッドに渡す関数が引数を2つ受け取る場合、プレースホルダを2回利用することができます。

これはリストのソートをする関数です。
まずは省略しない形で
これをプレースホルダを利用して省略すると

これもListの要素がクラスになっていても利用できます。

2つの引数のうち一つがコレクションの要素でないものもあるので、注意が必要です。

このメソッドを省略しない形で実行すると

となります。
そして、省略すると

となります。こういった関数の場合、コレクションの要素がクラスになっていると

となり、1番目の引数と2番目の引数の型が違っているので、省略するときも注意が必要です。

APIをみたときは「A = コレクションの要素の型」、「B = その他の型」となると覚えておくと良いです。

最後に外でメソッドを作って、それを渡す場合、引数の型がコレクション要素の型となってい必要があります。

これは、foreachの関数がコレクションの要素の型を引数として受ける関数をパラメータとしているためです。
このような場合は

とする必要があります。

0 件のコメント:

コメントを投稿