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)
などが通らない事ですが、たぶん解決するのが難しい…(頑張れば解決できるかも)