2013-06-25 3 views
3

Это спин-офф замечательного SO ответа здесь: How do I break out of a loop in Scala?Почему нет «перерыва со значением» в Scala 2.8+?

Почему 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 

Я могу предоставить такие функциональные возможности себя, но было просто интересно.

Перерыв документация здесь: http://www.scala-lang.org/api/current/index.html#scala.util.control.Breaks

+0

Что бы типы быть? Я мог видеть, что он работает, если у вас есть «breakable {break => ...}» (в этом случае он просто выглядит как callCC'), но с вашим предложением я не вижу ничего, связывающего параметр, который вы передаете 'break', в котором он живет. –

ответ

3

Преимущество, что более простое создание размораживания минимально.

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

(Конечно, я сделать есть реализация в моем наборе инструментов, но это не то, что я использую часто.)

Смежные вопросы