scala – 调度功能
发布时间:2020-12-16 18:53:49 所属栏目:安全 来源:网络整理
导读:什么是调度功能?我用谷歌搜索过,一切都模糊不清.它们似乎只是嵌套在其他函数内的块/闭包?从 scala /提升点说起……但我认为它是普遍的,我也看到过它们在ruby中提到过. 解决方法 调度的目标是动态决定在您的函数中执行的操作. 如果你有一个(动态)调度函数它
什么是调度功能?我用谷歌搜索过,一切都模糊不清.它们似乎只是嵌套在其他函数内的块/闭包?从
scala /提升点说起……但我认为它是普遍的,我也看到过它们在ruby中提到过.
解决方法
调度的目标是动态决定在您的函数中执行的操作.
如果你有一个(动态)调度函数它是主要的(或者只有,如果你不需要转换或其他转换),则责任是决定调用哪个其他函数.该决定通常基于调用该方法的实例的类型,或某些参数的类型,但它也可以取决于例如. on参数的值,或一些配置值. 调度规则可以是硬编码的(使用例如scala中的模式匹配),或者可以来自调度表. 正如你所提到的,有几种变体,比如单调度(具体方法取决于调用原始方法的实例,这是一种基本的OO机制),double dispatch(根据运行时类型调度函数调用不同的具体函数)呼叫中涉及的多个对象). 相关的设计模式是Visitor,它允许您动态地向现有类添加一组函数,并在其核心还具有动态调度. 当您在调度方法内部或某些初始化代码(例如,调度表)中定义具体方法时,会出现嵌套的块/闭包. 调度基于参数值,硬编码决策和调度表的情况的简单示例: 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() } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |