调度功能到底是什么?我搜索了他们,都是模糊的。他们似乎只是在其他功能内嵌套块/关闭?从一个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