調度功能到底是什麼?我搜索了他們,都是模糊的。他們似乎只是在其他功能內嵌套塊/關閉?從一個scala/lift點..說話但我認爲它是普遍的,我也看到他們在紅寶石中提到。調度功能
Q
調度功能
6
A
回答
7
調度的目標是動態地決定在你的函數中做什麼。
當你有一個(動態)調度函數時,它是主要的(或者,如果你不需要轉換或其他轉換),責任是決定調用哪一個其他函數。該決定通常基於該方法被調用的實例的類型或某些參數的類型,但也可以取決於例如關於參數的值,或者一些配置值。
調度規則可以是硬編碼的(例如使用scala中的模式匹配),也可以來自調度表。正如你所提到的,有幾種變化,比如單個調度(具體方法取決於調用原始方法的實例,這是一個基本的OO機制),double dispatch(調度函數調用不同的具體函數,取決於呼叫中涉及的多個對象的運行時類型)。
相關的設計模式是Visitor,它允許您動態地將一組函數添加到現有類中,並且在其核心還具有動態分派。
當您在調度方法內部或在某些初始化代碼(調度表的e.f.)中定義具體方法時,會顯示嵌套塊/閉包。
的情況下,一個簡單的例子,當調度是基於參數的值,用硬編碼的決定,並與調度表:
class Dispatch {
def helloJohn(): String = "Hello John"
def helloJoe(): String = "Hello Joe"
def helloOthers(): String = "Hello"
def sayHello(msg: String): String = msg match {
case "John" => helloJohn()
case "Joe" => helloJoe()
case _ => helloOthers()
}
val fs = Map("John" -> helloJohn _, "Joe" -> helloJoe _)
def sayHelloDispatchTable(msg: String): String = fs.get(msg) match {
case Some(f) => f()
case _ => helloOthers()
}
}
3
調度是長期Lift使用派遣Web服務請求。
定義使用RestHelper調度功能,最簡單的方法(見http://www.assembla.com/wiki/show/liftweb/REST_Web_Services)
例如:
object MyRestService extends RestHelper {
serve {
case "api" :: "user" :: AsLong(id) :: _ XmlGet _ => <b>ID: {id}</b>
case "api" :: "user" :: AsLong(id) :: _ JsonGet _ => JInt(id)
}
}
然後在Boot.scala:
LiftRules.dispatch.append(MyRestService)
希望這有助於。
相關問題
- 1. Grand Central調度和功能
- 2. jQuery函數調度功能
- 3. 如何解決功能和角度調用其他功能
- 4. 停止調度後繼續功能
- 5. 使用defmulti調度功能的問題
- 6. React/Redux調度功能不起作用
- 7. 多次調用角度服務功能
- 8. Redux:如何導入調度功能?
- 9. 創建映射功能的調度器
- 10. 角度4功能,調用路由
- 11. 調度功能,終極版,反應
- 12. 功能調試
- 13. 功能調用
- 14. 微調功能
- 15. 功能角度JS
- 16. 功能的角度
- 17. Javascript功能難度
- 18. 成功調用drop功能
- 19. 從空白的JavaScript文件調用調度功能
- 20. mapDispatchToProps並直接調用組件中的調度功能
- 21. 如何設置由LoopingCall調度的功能的調用次數?
- 22. 調用.R從功能輔助功能
- 23. 不能調用AJAX功能
- 24. 調用JS功能
- 25. 調用C#功能
- 26. 調用C#功能
- 27. 調用類功能
- 28. JavaScript調用功能
- 29. 調用std ::功能
- 30. 調用JavaScript功能
強制性博客鏈接:http://cleverlytitled.blogspot.com/2010/01/dynamic-dispatch-in-scala.html – 2010-05-18 15:16:12