Нелокальный возврат в Scala является новым?

Коллега только что показал мне это, и я был удивлен, что он вообще скомпилирован:

def toUpper(s: Option[String]): String = {
  s.getOrElse(return "default").toUpperCase
  //          ^^^^^^  // a return here in the closure??
}

и это даже работает:

println(toUpper(Some("text"))) // TEXT
println(toUpper(None))         // default

Я думал return изнутри замыкания не было позволил. С каких это пор это сработало? Есть ли предостережения в отношении таких неместных доходов?

24
задан Martijn Pieters 10 January 2013 в 18:10
поделиться