Yoichi's diary


2015-03-26

_ [scala] Functional Programming in Scala 社内読書会#3

今回の範囲は2.5〜3.2。 追加の練習問題を作っていって手を動かしてもらった (資料 の末尾にある) 。 次も何か考えていこう。

  • match の後の case で型違いはコンパイルエラーになる。match の手前を無理やり Any にしてやると?

→ そうすればエラーにならず、同じ型の case にマッチングしてくれるみたい。

scala> :paste
// Entering paste mode (ctrl-D to finish)

(List(1,2) : Any) match {
  case 1 => 1
  case 2 => 2
  case List() => 3
  case List(1,2) => 4
}

// Exiting paste mode, now interpreting.

res0: Int = 4
  • def le(x: Int, y: Int) = x <= yのような関数を多相関数にできる?

→ <: で使いたいメソッドを持つ upper type bound を付けてやればいいみたい (参考: http://www.scala-lang.org/old/node/136)

scala> def le(x: Int, y: Int): Boolean = x <= y
le: (x: Int, y: Int)Boolean

scala> def le[A](x: A, y: A): Boolean = x <= y
<console>:7: error: value <= is not a member of type parameter A
       def le[A](x: A, y: A): Boolean = x <= y

scala> def le[A <: Int](x: A, y: A): Boolean = x <= y
le: [A <: Int](x: A, y: A)Boolean