Смысл наличия продолжений заключается в возможности использовать прямой стиль кодирования, даже если обычно меня заставляют кодировать более сложным способом (например, в стиле, управляемом событиями).
Таким образом, клиентский код, который я хотел бы написать, был бы таким:
reset {
val event1 = widget1.waitForEvent()
handle1(event1)
val event2 = widget2.waitForEvent()
handle2(event2)
val event3 = widget3.waitForEvent()
handle3(event3)
}
Таким образом, материал слушателя будет скрыт от меня.Но, конечно, слушатели все равно должны быть где-то внизу.Я бы спрятал их в методе waitForEvent () виджета (либо добавленном в класс Widget, либо доступным через неявное преобразование).Метод будет выглядеть так:
def waitForEvent() = shift { k =>
this.addListener(event => k(event))
k
}
Это по крайней мере на концептуальном уровне.Чтобы это работало, вам, возможно, потребуется добавить аннотации type- и / или @cps.