加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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()
     }
   }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读