如何在 Scala 中利用 ADT 良好地组织业务 - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
在用 Scala 做业务开发的时候,我们大都会用到 case class 以及「模式匹配」,本文将介绍在日常开发中如何利用 case class 模拟 ADT 去良好地组织业务。
ADT(代数数据类型)在计算机编程、特别是函数式编程与类型理论中,ADT 是一种 composite type(组合类型)。例如,一个类型由其它类型组合而成。两个常见的代数类型是 product(积)类型 (比如 tuples 和 records )和sum(和)类型,它也被称为 tagged unions 或 variant type。
这里简单介绍一下常见的两种代数类型 product(积)类型和 sum(和)类型
计数(Counting)在介绍两种常见代数类型之前我们先介绍一下 「计数」 的概念,方面理解后面所要介绍的内容。
为了将某个类型与我们熟悉的数字代数相关联,我们可以计算该类型有多少种取值,例如 Haskell中的Bool 类型:
1data Bool = true | false可以看到 Bool 类型有两种可能的取值,要么是 false, 要么是 true, 所以这里我们暂时将数字...阅读全文

 Akka 系列(三):监管与容错 - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
Akka作为一种成熟的生产环境并发解决方案,必须拥有一套完善的错误异常处理机制,本文主要讲讲Akka中的监管和容错。
监管看过我上篇文章的同学应该对Actor系统的工作流程有了一定的了解Akka系列(二):Akka中的Actor系统,它的很重要的概念就是分而治之,既然我们把任务分配给Actor去执行,那么我们必须去监管相应的Actor,当Actor出现了失败,比如系统环境错误,各种异常,能根据我们制定的相应监管策略进行错误恢复,就是后面我们会说到的容错。
监管者既然有监管这一事件,那必然存在着监管者这么一个角色,那么在ActorSystem中是如何确定这种角色的呢?
我们先来看下ActorSystem中的顶级监管者:

一个actor系统在其创建过程中至少要启动三个actor,如上图所示,下面来说说这三个Actor的功能:
1./: 根监管者顾名思义,它是一个老大,它监管着ActorSystem中所有的顶级Actor,顶级Actor有以下几种:
/user: 是所有由用户创建的顶级actor的监管者;用ActorSystem.actorOf创建的actor在其下。/sys...阅读全文

  Scala 类型的类型(一) - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
原文http://ktoso.github.io/scala-types-of-types/
目录1. Scala 类型的不同类型2. 写作进度3. Type Ascription4. 通用类型系统 — Any, AnyRef, AnyVal5. 底类型 - Nothing 与 Null1. Scala 类型的不同类型2013 年在几场 「JavaOne 大会」之后,掀起了一些关于 「Scala 类型」方面的热议,这篇博文也应运而生。  
在这些讨论声中,我发现不同的人在学习 Scala 的过程中,经常重复提出相同的问题。我想我们缺少一个详尽的清单,来指明跟 Scala 类型打交道的方法,所以我决定总结下自己已有的经验,分享在 Scala 中为什么我们需要这些类型。
2. 写作进度尽管我写这篇文章已经有段时间了,但始终还有很多内容未完成。比如说「高阶类型」部分需要重新梳理,「Self Type」还得补充更多细节,等等等等。详情参见计划清单。
此外,如果你看到某个部分被打上了 ❌ ,则表示该部分需要修改或者是未完成。
3. Type AscriptionScala 有「类型推导...阅读全文

 Akka 系列(二):Akka 中的 Actor 系统 - Scala Cool 

作者:JerryXia | 发表于 , 阅读 (0)
Actor模型作为Akka中最核心的概念,所以Actor在Akka中的组织结构也至关重要,本文主要介绍Akka中Actor系统。
Actor系统Actor作为一种封装状态和行为的对象,总是需要一个系统去统一的组织和管理它们,在Akka中即为ActorSystem,其实这非常容易理解,好比一个公司,每个员工都可以看成一个Actor,它们有自己的职位和职责,但是我们需要把员工集合起来,统一进行管理和分配任务,所以我们需要一个相应的系统进行管理,好比这里的ActorSystem对Actor进行管理一样。
ActorSystem的主要功能ActorSystem主要有以下三个功能:
管理调度服务配置相关参数日志功能1.管理调度服务ActorSystem的的精髓在于将任务分拆,直到一个任务小到可以被完整处理,然后将其委托给Actor进行处理,所以ActorSystem最核心的一个功能就是管理和调度整个系统的运行,好比一个公司的管理者,他需要制定整个公司的发展计划,还需要将工作分配给相应的工作人员去完成,保障整个公司的正确运转,其实这里也体现了软件设计中的分而治之,Actor中的核心思想也是这...阅读全文