学んだことをなぐり書き


インスタンス生成

参考:http://www.ne.jp/asahi/hishidama/home/tech/scala/c...
// 全て同じ値で満たすSeqを生成
// fill(生成する数)(埋める値)
println(List.fill(5)(10))

// 範囲を指定してSeqを生成
// range(開始、終了、ステップ数)
println(List.range(5, 20, 3))
List(10, 10, 10, 10, 10)
List(5, 7, 9, 11, 13, 15, 17, 19)

Function.const

val range = List range (0, 5)

// 全て同じ値のmapをしたい場合カウンター変数 i は使用してないのでなんか気持ち悪い
println(range map { i => 10 })

// しかし map { 10 } のような形だとエラーになる
// println(range map { 10 }) // error

// Function.const を使用すれば解決
println(range map { Function.const(20) })

class C { override def toString = "class c" }

// 当然 Function.const の中はどんな型でもおk
println(range map { Function.const(new C) })
List(10, 10, 10, 10, 10)
List(20, 20, 20, 20, 20)
List(class c, class c, class c, class c, class c)

zipWithIndex

// ruby の each_witn_index のようなループカウンターが欲しい場合は zipWithIndex を使う
// 後ろにインデックスを加えた Tuple2 を戻すらしい
println(List(100, 200, 300).zipWithIndex)

List(100, 200, 300).zipWithIndex foreach { case(num, index) => println("%d: %d".format(index, num)) }

// ほかのコレクションのメソッドでも使える
val m = List(100, 200, 300).zipWithIndex map { case(num, index) => index + num }
println(m)
List((100,0), (200,1), (300,2))
0: 100
1: 200
2: 300
List(100, 201, 302)

メンバーのみ編集できます