以下の内容はhttps://kmizu.hatenablog.com/entry/20121215/1355587653より取得しました。


irof式が実装できたよ。そう、Scalaならね! (Re: irof文が実装できたよ。そう、Scalaならね!)

See: irof文が実装できたよ。そう、Scalaならね!

返り値が思い通りにならないことに困ってらっしゃったようなので(?)、実装してみました。

object Main {
  case class irof[A](val condition: Boolean)(blockA: => A) {
    val thunk: () => A = () => blockA
    def elof[B <: A](blockB: => B): A = if(condition) thunk() else blockB
  }

  implicit def irofToA[A](i: irof[A]): Any = if(i.condition) i.thunk()

  def main(args: Array[String]) {
    val x: String = irof(args.length > 0) {
      "foo"
    } elof {
      "bar"
    }
    println(x)
  }
}

これの問題点は、elofの型制約のせいで、

val x: Any = irof(args.length > 0) {
  "foo"
} elof {
  1
}
 println(x)

などが通らない事ですが、たぶん解決するのが難しい…(頑張れば解決できるかも)




以上の内容はhttps://kmizu.hatenablog.com/entry/20121215/1355587653より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14