为什么不打破价值'在Scala 2.8+?

时间:2013-06-25 06:08:03

标签: scala break scala-2.8

这是一个精彩的SO答案的衍生产品: How do I break out of a loop in Scala?

为什么Scala 2.8+不允许用一个值打破,这会成为breakable部分的值?这通常很实用。

var r= rnd.nextInt(sum)

breakable {
  for( (n,st) <- arr ) {
    if (r<n) break(st)
  } else {
    r -= n
  }
}

而不是(对现有库使用var):

var r= rnd.nextInt(sum)
var dest: Station = null

breakable {
  for( (n,st) <- arr ) {
    if (r<n) { dest=st; break }
  } else {
    r -= n
  }
}
dest

我自己可以提供这样的功能,但只是想知道。

Break文档在这里:http://www.scala-lang.org/api/current/index.html#scala.util.control.Breaks

1 个答案:

答案 0 :(得分:3)

与简单创建def相比,这样做的优势很小。

def breaking: Station = {
  for ( (n,st) <- arr ) {
    if (r < n) return st
    else r -= n
  }
  defaultStation
}
breaking

(当然,我在我的工具集中有一个实现,但它不是我经常使用的东西。)