調度功能到底是什麼?我搜索了他們,都是模糊的。他們似乎只是在其他功能內嵌套塊/關閉?從一個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. jQuery函數調度功能
- 2. 如何解決功能和角度調用其他功能
- 3. 創建映射功能的調度器
- 4. 多次調用角度服務功能
- 5. 角度4功能,調用路由
- 6. 調度功能,終極版,反應
- 7. Redux:如何導入調度功能?
- 8. React/Redux調度功能不起作用
- 9. 使用defmulti調度功能的問題
- 10. 功能調試
- 11. 功能調用
- 12. 微調功能
- 13. 功能的角度
- 14. 成功調用drop功能
- 15. 如何設置由LoopingCall調度的功能的調用次數?
- 16. mapDispatchToProps並直接調用組件中的調度功能
- 17. 調用.R從功能輔助功能
- 18. 功能與回調
- 19. 調用JavaScript功能
- 20. JavaScript調用功能
- 21. 調用的功能
- 22. PHP微調功能
- 23. 反轉刻度功能
- 24. 功能匹配難度
- 25. 角度成分的功能
- 26. C#小數精度功能
- 27. JS - 檢查長度功能
- 28. 未定義功能高度
- 29. 難度命名功能
- 30. 速度了研發功能
強制性博客鏈接:http://cleverlytitled.blogspot.com/2010/01/dynamic-dispatch-in-scala.html – 2010-05-18 15:16:12