3

私がライブラリを書いていたら、私は習慣的に Option を次のように書いていました:

abstract class Option[+A] {
  def map[B](f: A => B): Option[B]
}

case object None extends Option[Nothing] {
  override def map[B](f: Nothing => B): Option[B] = None
}

case class Some[+A](a: A) extends Option[A] {
  override def map[B](f: A => B): Option[B] = new Some(f(a))
}

map実装にポリモーフィズムを使用していることに注意してください。ただし、 map の実際の実装は完全に Option クラスにあり、次のようになります。

def map[B](f: A => B): Option[B] =
    if (isEmpty) None else Some(f(this.get))

私の実装はよりクリーンで (ポリモーフィズムの利点を参照してください)、おそらくより高速であると主張します。同様のケースではなく、Either型の一致が使用されます。C の人々が Java に来るときに使用するステートメントを思い出します。興味深いことに、類似の実装は私の OOP 流派に従っています。したがって、より短いソリューションが で選択されたと思います。他の理由はありますか?ifswitchTryOption

4

1 に答える 1