scala
qiruiduni
这个作者很懒,什么都没留下…
展开
-
动态语言 静态语言
动态语言,是指在程序运行期间检查数据的类型,在程序编写时无需指定数据类型的编程语言。如,Python和Ruby等都是动态语言,还有脚本语言vbscript,javascript等也是动态语言。静态语言,是指在程序编写时就已指定了数据的类型,编译时做类型检查。如C、C++、Java等都是静态语言。可以通过比较语言的语法格式,基本就可以确认是动静态语言了。动态语言在运行期间原创 2015-06-18 15:45:37 · 604 阅读 · 0 评论 -
复合类型与with关键字
符合类型的表现形式为:class A extends B with C with D with E 应做类似如下形式解读:class A extends (B with C with D with E)这正是《scala for the impatient》这本书上的内容,我下面的理解也基本源于这本书。T1 with T2 with T3 …这种形式的类型转载 2015-07-06 16:26:32 · 699 阅读 · 0 评论 -
Scala 数据类型的协变、逆变、上边界、下边界
先说说协变和逆变(实际上还有非变)。协变和逆变主要是用来解决参数化类型的泛化问题。由于参数化类型的参数(参数类型)是可变的,当两个参数化类型的参数是继承关系(可泛化),那被参数化的类型是否也可以泛化呢?Java中这种情况下是不可泛化的,然而Scala提供了三个选择,即协变、逆变和非变。下面说一下三种情况的含义,首先假设有参数化特征Queue,那它可以有如下三种定义。 1)trait Queue转载 2015-07-06 11:45:30 · 1592 阅读 · 0 评论 -
Scala 集合
Scala有一个非常通用,丰富,强大,可组合的集合库;集合是高阶的(high level)并暴露了一大套操作方法。很多集合的处理和转换可以被表达的简洁又可读,但不审慎地用它们的功能也会导致相反的结果。每个Scala程序员应该阅读 集合设计文档;通过它可以很好地洞察集合库,并了解设计动机。scala集合API: http://www.scala-lang.org/docu/files/col转载 2015-07-07 14:14:17 · 1180 阅读 · 0 评论 -
Scala 函数式编程
a、什么是函数编程b、函数编程和面向对象编程的区别c、函数编程的优缺点d、原创 2015-07-10 10:25:43 · 632 阅读 · 0 评论 -
Scala 函数柯里化(Function currying)
部分应用的函数和其他遵循函数式编程范式的语言一样,Scala 允许部分应用一个函数。 调用一个函数时,不是把函数需要的所有参数都传递给它,而是仅仅传递一部分,其他参数留空; 这样会生成一个新的函数,其参数列表由那些被留空的参数组成。(不要把这个概念和偏函数混淆)为了具体说明这一概念,回到上一章的例子: 假想的免费邮件服务,能够让用户配置筛选器,以使得满足特定条件的邮件显示在收件箱里,其他的转载 2015-07-15 16:28:53 · 2592 阅读 · 0 评论 -
Scala 函数
a、方法和函数的对比在Scala中,函数最常见的形式是定义在类中,这时就不叫做函数了,而是称为方法。在类中定义方法的一个缺点是方法可能会依赖类的状态(成员变量),存在副作用。而函数不会有这些情况。在Scala中,函数表示为类型和对象,而方法却不是,方法仅和定义它的类型相关。但是Scala提供了一种转换处理,可以把类中的方法转为函数,称为“Eta expansion”。只需使用方法名加上下划原创 2015-07-14 14:27:24 · 526 阅读 · 0 评论 -
Scala 闭包
1、什么是闭包闭包是指包含自由(未绑定到特定对象)变量的代码块,这些自由变量不是在这个代码块内或是任何全局上下文定义的,而是在定义代码块的环境中定义的(即局部变量)。“闭包” 一词来源于以下两者的结合:要执行的代码块(由于自由变量被包含在代码块中,这些自由变量以及它们引用的对象没有被释放)和为自由变量提供绑定的计算环境(作用域)。以下为摘自《Programming in Scala原创 2015-07-16 21:55:35 · 585 阅读 · 0 评论 -
Scala 偏函数和偏应用函数
偏函数偏函数是指仅定义了输入参数的子集的函数,如下图:这个图显示的一个偏函数:f : X -> Y,该函数仅定义了输入参数X的子集1和3,没有包含2。在Scala中的偏函数是通过特质PartialFunction[-A, +B]来定义的,查看PatialFunction特质的API,可看到PatialFunction定义如下:trait PartialFunction[原创 2015-07-16 16:54:25 · 6236 阅读 · 0 评论 -
语法糖
In computer science, syntactic sugar is syntax within a programming language that is designed to make things easier to read or to express. It makes the language "sweeter" for human use: things can转载 2015-06-25 14:31:01 · 614 阅读 · 0 评论 -
Scala的面向对象
a、类和构造函数在Scala中声明一个类是通过class关键字定义的,如下: class MongoClient(val host:String, val port:Int)这看起来和java有些不同,Scala的类名后带有参数,表示在声明类的同时,也创建了主构造函数。当在创建MongoClient实例时,需要直接或间接从重载的构造函数中调用主构造函数。在Scala中声明主构造函数原创 2015-06-24 09:57:32 · 735 阅读 · 0 评论 -
Scala 的Value Class 和 Universal Traits
引言Value classes是在SIP-15中提出的一种通过继承AnyVal类来避免运行时对象分配的新机制。以下是一个最简的value class。class Wrapper(val underlying: Int) extends AnyVal它仅有一个被用作运行时底层表示的公有val参数。在编译期,其类型为Wrapper,但在运行时,它被表示为一个Int。V转载 2015-07-05 16:11:15 · 1202 阅读 · 0 评论 -
面向函数范式编程(Functional programming)
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程。 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合。 首先,什么是函数式编程,这并没有唯一定义,它只是广泛聚合了一些编程风格的特性,我们可以将它与面向对象编程OOP进行对比, 两者区别是,OOP主要聚焦于数据的区别,而FP则注重数据结构的一致性。转载 2015-07-10 15:36:27 · 1268 阅读 · 0 评论 -
函数式编程
1. 概论在过去的近十年的时间里,面向对象编程大行其道。以至于在大学的教育里,老师也只会教给我们两种编程模型,面向过程和面向对象。孰不知,在面向对象产生之前,在面向对象思想产生之前,函数式编程已经有了数十年的历史。那么,接下来,就让我们回顾这个古老又现代的编程模型,让我们看看究竟是什么魔力将这个概念,将这个古老的概念,在21世纪的今天再次拉入了我们的视野。2转载 2015-06-18 11:03:30 · 439 阅读 · 0 评论 -
js拾遗: 函数字面量
函数字面量由4部分组成。第一部分,关键词 function第二部分,函数名,但是可有可无。第三部分,包含在括号内的参数,当然参数也是可有可无的,括号不能少。第四部分,是一组包裹在大括号的语句块,也就是函数要执行的具体代码,当然不写代码也没问题,{} 是必须要的。 乍一看,这个不就是函数的定义么,怎么说是函数字面量呢?其实,之前我们就说了一个限转载 2015-06-19 18:00:17 · 1119 阅读 · 0 评论 -
从函数字面量发现函数式编程
引言我相信很多像我一样初次接触函数式编程的程序员来说,对于“函数字面量”这个概念会感到迷惑和不解。伴随着深入地学习,在清晰地理解了这个概念之后,我进行了一些梳理和回溯,作为函数式编程思想延伸到最基层的语言元素,我深刻地觉得“函数字面量”这个概念的背后影射出的是函数式编程的核心用意和理念。所以我想以函数字面量作为一个切入点和观察视角来讨论一下它背后蕴含的函数式编程思想的动机和意图。函转载 2015-06-19 17:58:22 · 524 阅读 · 0 评论 -
浅谈尾递归
在《数据结构与算法分析:C描述》(Data Structures and Algorithm Analysis In C)的第三章中,以打印链表为例,提到了尾递归(tail recursion)并指出了尾递归是使用递归极其不当的例子,它指出虽然编译器会对尾递归自动优化,但即便如此最好还是不要去写尾递归。而我在《算法精解:C语言描述》(Mastering Algorithms with C)中也转载 2015-06-23 17:58:49 · 515 阅读 · 0 评论 -
Scala 基础
1、Scala的基本数据类型在Scala中所有的数据类型都是对象,它支持Java的所有基本数据类型:Byte、Char、Short、Int、Long、Float、Double、Boolean,在声明这个数据类型时都要首字母大写,否则会报一个编译时的异常。这些数据类型都位于Scala的“scala”包中,Scala的编译器默认隐式导入的,并且还隐式导入了java.lang包。可以通过“:impo原创 2015-06-19 10:43:36 · 591 阅读 · 0 评论 -
Scala Option
前言Java 里的 Null Pointer Exception写过一阵子的Java后, 应该会对NullPointerException (NPE)这种东西很熟悉,基本上会碰到这种异常,就是你有一个变量是 null,但你却调用了它的方法,或是取某个的值。举例而言,下面的 Java 代码就会抛出NPE异常:例1:String s1 = null;System转载 2015-07-07 17:47:23 · 685 阅读 · 0 评论 -
Scala 特质
Scala特质可以给出特质的缺省实现不支持多重继承Scala也还是不支持多重继承。如果几个类有某些共通的方法或者字段,那么从它们多重继承时,就会出现麻烦。所以Java被设计成不支持多重继承,但可实现任意多的接口。接口只能包含抽象方法,不能包含字段。而Scala中的特质,可以同时拥有抽象方法和具体方法,类可以实现多个特质。当做接口使用的特质转载 2015-07-02 15:05:12 · 1477 阅读 · 0 评论 -
Scala 的数据结构
a、类型参数化Scala 的类型参数化是指在定义类、函数时,参数的数据类型并不明确,需要在创建具体的实例或调用函数时才可以确定,这时,可以用一个占位符(通常为A ~ Z中的单个字符)来替代,这类似于java的泛型。如下:def position[A](xs: List[A], value: A): Int = { xs.indexOf(value)}这里的A是表示某种数据类型,它原创 2015-07-06 10:52:19 · 2568 阅读 · 0 评论 -
蒯因与引用透明
蒯因又称奎因,美国哲学家,逻辑学家,逻辑实用主义的代表,与罗素齐名,强调系统的、结构式的哲学分析,主张把一般哲学问题置于一个系统的语言框架内进行研究。蒯因从逻辑的观点出发,把语言分析作为哲学研究的核心内容,这就为哲学的语言转向划上了一个圆满的句号:自蒯因哲学起,当哲学家开始讨论哲学问题的时候,都需要首先考察所要讨论的命题的意义,而不会像传统哲学家那样依然专注于对世界存在的思考。蒯因转载 2015-07-10 15:32:15 · 1862 阅读 · 0 评论 -
scala 快速排序
import scala.collection.mutable.ListBuffer/** * Created by Administrator on 2016/6/25. * 快速排序:首先找一个基准元素,通常取第一个或最后一个元素作为基准元素,然后, * 从右向左遍历,找到第一个比基准元素小的元素,并记录下当前元素的索引right,两者交换, * 交换完成后,就开始从左往右原创 2016-06-25 15:49:17 · 1509 阅读 · 0 评论