Scala
文章平均质量分 71
Yuan Jianzheng
这个作者很懒,什么都没留下…
展开
-
Case Class
概述使用原因特点概述Case class是具有如下特点的普通类: 1. 默认情况下不可对属性(fields)进行修改; 2. 在模式匹配时会进行解构(unapply); 3. 两个case class进行比较时进行全等比较(Compared by structural;也称为按值比较,Comparison-by-value),而非按是否引用同一个对象进行比较(也即指针值是否相等); 4.原创 2016-11-24 21:45:03 · 1249 阅读 · 0 评论 -
函数式编程的数据结构
概述常用数据结构容器类型序列Seq序列之List序列之Vector常用操作概述面向对象语言通常为各个领域建立对等类来实现其业务,而函数式编程则倾向于使用核心数据结构和算法来实现业务逻辑。通常数据结构被定义为:相互之间存在一种或多种特定关系的数据元素的集合。也即,Data_Structure=(D, R),其中D为数据的有限集,而R则为关系的有限集。原创 2017-08-27 11:42:36 · 1047 阅读 · 0 评论 -
组件复用——组合器
组件模型概述面向对象没有带来大规模组件复用的原因组件复用在Scala中的尝试组件模型概述从广泛的领域来看,成功的组件模型都依赖于非常简单的基础,这个基础使得组件能够创建、生成更复杂的结构,进而形成适用的高层协议。由此可知在软件领域中,恰当、通用的代码或二进制交互协议是复用组件的基础。如:数字集成电路(IC)用2n2^n根信号线与信号总线相连,每个信号线是一个布尔值,取值为开或关。在HTTP组原创 2017-08-27 10:35:18 · 271 阅读 · 0 评论 -
递归函数
定义缺点尾递归实例Trampoline类型递归函数定义直接或间接调用函数本身的函数称为递归函数。递归是函数式编程的特点,也是优雅地实现很多算法的强大工具。在函数式编程中递归是实现“循环”的唯一方法,这是因为你无法修改循环变量。缺点反复调用函数带来的开销;栈溢出的风险。尾递归在递归函数中,若递归调用是整个函数中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归函数就是尾递归。尾递原创 2017-06-04 10:22:34 · 408 阅读 · 0 评论 -
函数实现的契约——线程安全与透明引用
透明引用:函数的返回值只依赖于其输入值的特性。使用相同的xx值多次调用sinx\sin x,如果系统每次都重新进行一次计算将会是极大的浪费。即使在“纯粹”的函数库中,也常常执行内部优化,如使用缓存来记住之前的计算结果。但缓存引入了副作用,因此缓存的状态会被修改。然而,这种状态的改变对用户来说是不可见的(除非影响性能的意义)。函数的实现只需要负责达到“契约”即可,也即达到线程安全与透明引用。 参考原创 2017-06-04 09:54:49 · 331 阅读 · 0 评论 -
多参列表与Curry化
多参列表Curry化多参列表class Xxx { def func(age: Int, name: String)(flavorFood: String, flavorBook: String)(f: String => Unit) = { f(s"$name old is $age, who's flavor food is $flavorFood and flavor book原创 2017-05-07 09:40:13 · 606 阅读 · 0 评论 -
偏函数与偏应用函数
偏函数偏应用函数偏函数val isEven: PartialFunction[Int, String] = { case x if x % 2 == 1 => " is even"}val isOdd: PartialFunction[Int, String] = { case x if x % 2 == 0 => " is odd"}(1 to 10) map (isEven orE原创 2017-05-07 07:37:54 · 2423 阅读 · 1 评论 -
函数、闭包及匿名函数(Lambda)
函数闭包匿名函数函数函数是绑定了值,或用其它表达式替换变量时可被求值或应用(apply)的计算行为的抽象。函数是一种具名或匿名的操作,其代码直到调用时才执行。在函数定义中,可能有也可能没有引用外部的自由变量(也即在函数定义之外定义的变量)。闭包闭包是一个在其定义中包含自由变量的函数,可能具名也可能匿名,并通过包含环境信息以绑定其引用的自由变量。var factor = 2val multipl原创 2017-05-07 07:15:17 · 588 阅读 · 0 评论 -
Intellj idea安装
之前觉得使用eclipse来写scala代码已经是一个很好的选择,但是后来发现其与intellj idea相比在体验上还是有不少的差距,故再次决定安装一个intellj idea来进行相关开发。这正是,生命在于折腾,见异终会思迁。目前,intelj idea的最新版本是2017.1,有商用和社区版本可供选择。考虑到商用版本虽然提供更强大的功能,但在30天的试用期后个人很可能不会购买授权,故在此最终选原创 2017-03-26 12:37:09 · 620 阅读 · 1 评论 -
Intellj idea中使用Gradle创建Scala项目
安装Gradle创建空白Gradle项目创建Scala项目安装Gradle到gradle官网下载gradle。我个人下载的是最新版本——gradle-4.7-bin.zip。解压到D:\目录下。设置环境变量GRADLE_HOME(D:\gradle-4.7),并将D:\gradle-4.7\bin添加到PATH中。在命令行中执行gradle -v确认已经安...原创 2018-07-15 13:44:46 · 5365 阅读 · 0 评论