LoginSignup
9
8

More than 5 years have passed since last update.

反変はなぜ関数の定義で使えるのか?覚書

Last updated at Posted at 2015-08-24

Scalaの場合、Javaと異なり反変という概念がある。
型パラメタの前に +をつければJavaなどと同じ共変、-をつければ反変だ。
関数トレイトなどで

trait Function1[-S, +T] { //関数の定義
  def apply(x: S): T
}

と使われる。

共変と反変の比較

A => BFunction1[A, B]の略記である。
引数にA=>Bをとるメソッドdef piyo(hoge: A => B){..の引数に
関数リテラルhoge1: A' => B'を渡すことを考える。

反変がある場合

trait Function1[-S, +T] { //関数の定義
  def apply(x: S): T
}

スクリーンショット 2015-08-24 12.12.26.png

A' => B' を用いる場合、図より A => Bの挙動も保証される。

両方とも共変の場合

trait Function1[+S, +T] { // 本当は違う
  def apply(x: S): T
}

スクリーンショット 2015-08-24 12.28.30.png

この場合、AかつA'でない箇所が未定義になるため、
A' => B'を用いた時に関数 A=>B の挙動を保証できない。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8