今日からリスト(List)のメソッドを見ていく。
Nil
Nil は空のリストを表す。Lisp みたいだな。
scala> Nil res0: scala.collection.immutable.Nil.type = List()
::(コンス)
リストの先頭に要素を付け足す演算子。
scala> 1 :: Nil res1: List[Int] = List(1)
Scala の演算子っていうのは実はメソッドのシンタックスシュガーで、引数が1つのメソッドは中置記法で書ける。さらに : で終わる演算子は右側のメソッドとして解釈される。だから上の例は次のようにもかける。
scala> Nil.::(1) res2: List[Int] = List(1)
まぁ、ふつうはこんな書きかたしないけどね。
scala> 1 :: List(2, 3, 4) res3: List[Int] = List(1, 2, 3, 4) scala> 1 :: 2 :: 3 :: 4 :: Nil res4: List[Int] = List(1, 2, 3, 4)
連結
リスト同士を連結するには ++。Haskell といっしょだな。
scala> List(1, 2, 3) ++ List(4, 5) res5: List[Int] = List(1, 2, 3, 4, 5)
mkString:文字列にフォーマッティングする
リストを文字列にする。mkString にはいくつかのバージョンがあって、まずは引数なしバージョン。これは単に要素を連結した文字列を返す。要素の型は文字列じゃなくてもいいみたいだ。
scala> List(1, 2, 3).mkString res6: String = 123
次に引数1つのバージョン。引数をセパレータとして連結する。
scala> List(1, 2, 3).mkString("-") res7: String = 1-2-3
最後に引数3つのバージョン。セパレータに加えて前後を囲む文字を指定する。
scala> List(1, 2, 3).mkString("<", "-", ">") res8: String = <1-2-3>
さて、今回はこのくらいかな。次はリストの高階関数(メソッドだけど)を見ていこう。
[追記]
Nil のところで、REPL に現れる型が scala.collection.immutable.Nil.type になっている。
scala> Nil res0: scala.collection.immutable.Nil.type = List()
Nil だけでは要素の型がわからないからこうなるみたいだ。要素の型を指定するにはこうする。
scala> Nil: List[String] res1: List[String] = List()
覚えておこう。