Ответ 1
Вы можете сделать что-то подобное, используя специальный экстрактор. Это должно работать:
case class Blah(a: Int, b: Int)
object expensive {
def unapply(x: Int): Option[Double] = Some(math.cos(x))
}
Blah(1, 1) match {
case Blah(a @ expensive(e), b) if e < 10 => println(a, b, e)
case _ => println("nothing")
}
Убедитесь, что expensive
действительно дороже, чем создание объекта Option
, что и было сделано выше.