這是一個關於Scala延續的問題。 resets
可以嵌套嗎?如果他們能夠:嵌套resets
有用嗎?有沒有嵌套resets
的例子?Scala中嵌套重置的示例
9
A
回答
6
是的,reset
s可以嵌套,是的,它可以是有用的。舉例來說,我最近爲scalagwt project創建了一個API,它允許GWT開發人員以直接樣式編寫異步RPC(遠程過程調用)(與GWT for Java中使用的回調傳遞樣式相反)。例如:
field1 = "starting up..." // 1
field2 = "starting up..." // 2
async { // (reset)
val x = service.someAsyncMethod() // 3 (shift)
field1 = x // 5
async { // (reset)
val y = service.anotherAsyncMethod() // 6 (shift)
field2 = y // 8
}
field2 = "waiting..." // 7
}
field1 = "waiting..." // 4
註釋表示執行順序。這裏,async
方法執行reset
,並且每個服務調用執行shift
(您可以在my github fork上看到實現,具體爲Async.scala)。
請注意嵌套的async
如何更改控制流。沒有它,線路field2 = "waiting"
將不會執行,直到成功完成第二個RPC。
當RPC被創建時,實現捕獲到最內層的async
邊界的延續,並且在成功完成RPC時掛起它以供執行。因此,嵌套的async
塊允許一旦第二個RPC被創建,控制就立即流入線路。另一方面,如果沒有嵌套塊,延續會一直延伸到外部塊的末端,在這種情況下,外部async
內的所有代碼都會在每個RPC上阻塞。
1
reset
形成一個抽象,使得外部代碼不受內部代碼使用延續魔法實現的事實的影響。因此,如果您正在使用重置和移位編寫代碼,則可以調用其他代碼,這些代碼可能也可能不會在重置和移位時執行。從這個意義上說,它們可以嵌套。
相關問題
- 1. 嵌套XML示例?
- 2. Rails:三重嵌套窗體示例
- 3. Scala中的C++嵌套類
- 4. Scala中的嵌套迭代
- 5. 嵌套CPS「重置」
- 6. Android嵌套按鈕示例?
- 7. 在Scala中編寫嵌套類的類實例
- 8. 實例化嵌套類Scala中延伸時的Java類
- 9. 將嵌套的ArrayBuffer轉換爲嵌套數組在scala中
- 10. 雙重嵌套表示OpenMP
- 11. 重量比例在嵌套的LinearLayout
- 12. Eclipse中的Scala對象嵌套類Java
- 13. Scala中的嵌套註釋列表
- 14. Scala中的Comonad示例
- 15. 一個嵌套的gridview示例
- 16. Scala嵌套列表反射
- 17. 來自嵌套泛型代碼清單的Scala實例化
- 18. 刪除重複代碼:嵌套案例
- 19. 重命名Scala中嵌套元素星火據幀
- 20. 嵌套反應(或接收)Scala中
- 21. Sencha Touch - 需要嵌套列表示例
- 22. 嵌套模型表單p1 Railscasts示例
- 23. Ansible複雜嵌套循環示例
- 24. 嵌套網格示例 - 不同列
- 25. log4net嵌套記錄器.config示例
- 26. AngularJS嵌套路由示例問題
- 27. 嵌套的循環重置radiogroups
- 28. nginx中的嵌套位置
- 29. 如何將嵌套的hasashps嵌套HashMap轉換爲Scala中的json?
- 30. Scala在PCDATA中嵌入嵌套的XML文檔