【发布时间】:2011-08-02 16:59:48
【问题描述】:
一位同事刚刚向我展示了这个,我很惊讶它完全编译:
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。这从什么时候开始起作用了?这种非本地回报是否有警告?
【问题讨论】:
-
非常混乱,因为
Some("text").getOrElse(return "default").toUpperCase和None.getOrElse(return "default").toUpperCase都不能编译。 -
def foo(): String = Some("text").getOrElse(return "default").toUpperCase编译正常;def foo(): String = (None: Option[String]).getOrElse(return "default").toUpperCase也是如此。 -
@Alexey 当然可以,但如果您删除
def foo():String =部分,则不会。 -
@agilesteel 错误信息说需要有一个封闭的方法才能返回。
-
我没有看到任何令人困惑的地方。 Scala 中的
return总是从封闭方法返回;如果您不在方法定义中,则不能使用return。
标签: scala return control-flow