Scala Continuations - Почему мой сдвинутый вызов не может быть внутри блока try-catch?

Я новичок в продолжениях Scala, и относительно новый для языка Scala в целом.

Я попытался поиграть с продолжениями Scala и написал следующий код:

case class MyException(msg:String) extends Exception

def go:Int = reset {
  println("enter your input")
  val my_check = //try 
  {
    val user_input = readLine()
    if (!user_input.matches("\\w+")) {
      throw new MyException("illegal string: " + user_input) 
    }
    shift {
      k: (Boolean => Int) => {
        if (user_input == "true") {
          k(true)
        }
        else if (user_input == "false") {
          k(false)
        }
        else {
          // don't even continue
          0
        }
      }
    }
  } 
//  catch {
//    case MyException(msg) => false
//  }
  if (my_check) {
    println("TRUE")
    1
  }
  else {
    println("FALSE")
    -1
  }
}

println(go)

Код работал должным образом: когда пользователь вводит не буквенно-цифровую строкуMyException выбрасывается, когда пользователь входит "правда" код продолжается сmy_check = trueкогда пользователь заходитложный" код продолжается сmy_check = falseи когда пользователь вводит буквенно-цифровую строку, которая не "правда" ни "ложный" go функция выходит с 0.

Затем я попытался обернуть часть кода в блок try-catch (где есть комментарии), и компиляция не удалась:

ошибка: найдено выражение cps в позиции не cps

val my_check = попробуй

Я так понимаюпроблема с "инъекционный» исключение в продолжение, но почемуt Я просто помещаю сдвинутый вызов в блок try-catch?

Мне нужно это в рамках, которые ям планирования, при котором программист не будет знать, что его код используется в форме продолжения (онназову какую-то функцию, которую он будет считать "нормальный", но на самом деле будет делатьshift).

Очевидно, мне нужно, чтобы он мог вызывать функцию внутри блока try-catch, даже если сам сдвинутый вызов не вызовет исключения.

Можно ли решить эту проблему с помощьюControlContext? Поможет ли я добавить "набрав» правила о значениях (может быть, с@cps [..])?

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

Спасибо,

(P.S. I 'м, используя Scala 2.9.2, и, очевидно, использовать-P: продолжения: включить флаг)

Ответы на вопрос(1)

Ваш ответ на вопрос