Scala
文章平均质量分 82
Javis486
天下皆白,唯我独黑
展开
-
scala类型系统:11) upper bounds & lower bounds
scala类型系统:10) 交集类型与联合类型《快学scala》这本书(即《Scala for the Impatient》中文版)在介绍复合类型时提到它们也被成为“交集类型”,跟老高确认了一下,这块的英文原文是:In order to belong to the compound type, a value must belong to all of the individual转载 2016-11-09 09:52:09 · 527 阅读 · 0 评论 -
scala类型系统:12) view bounds-视图界定
scala类型系统:12) view boundsview bounds-视图界定很早前在来往的扎堆里发过一段模拟C#的using代码:def using[ C T): T = { try { handle(resource) } finally { closeQuietly(resource) }}Eric(药转载 2016-11-09 09:52:28 · 975 阅读 · 0 评论 -
scala类型系统:13) context bounds-上下文界定
scala类型系统:13) context boundscontext bounds-上下文界定与view bounds一样context bounds(上下文界定)也是隐式参数的语法糖。context bounds的出现是scala2.8版本才增加的,起因是2.8版本修正了数组类型的设计(关于这个话题后续单独讨论),同时为语法上的方便,引入了”上下文界定”这个概念。看一个简单转载 2016-11-09 09:52:41 · 1434 阅读 · 0 评论 -
scala类型系统:14) multiple bounds-多重界定
scala类型系统:14) multiple bounds在之前的:scala类型系统:11) upper bounds & lower bounds 结尾提到过在multiple bounds(多重界定)情况下java与scala的一些差异,这篇详细说一下scala里的multiple bounds。1 不能同时有多个upper bounds 或 lower bounds,变通的转载 2016-11-09 09:52:58 · 539 阅读 · 0 评论 -
scala类型系统:15) 协变与逆变
scala类型系统:15) 协变与逆变对于一个带类型参数的类型,比如 List[T],如果对A及其子类型B,满足List[B]也符合 List[A]的子类型,那么就称为covariance(协变),如果List[A]是 List[B]的子类型,即与原来的父子关系正相反,则称为contravariance(逆变)协变: _____ ________转载 2016-11-09 09:53:13 · 374 阅读 · 0 评论 -
Scala-类型参数和界定
1.协变和逆变下面以队列为例trait Queue[T]{ //some trait member....}我们知道AnyRef是String的超类,但能否说Queue[String就是Queue[AnyRef]的子类类型呢?从更加广泛的意义上来说,如果S是T的子类型,那么能否把Queue[S]当作Queue[T]的子类类型?答案是否定的,但是Scala的另一种特效----协变原创 2016-10-05 10:15:40 · 1096 阅读 · 0 评论 -
scala类型系统:16) 函数类型
scala类型系统:16) 函数类型函数类型在写法上(T1,T2…) => R小括号里的是入参类型(最多可以有22个,最少为0),右箭头右边的是返回结果类型。函数类型里可以使用通配符“_”,表示任意类型:scala> val x: String => _ = nullx: Function1[String, _] = null右箭头形式的背后是转换转载 2016-11-15 23:00:40 · 631 阅读 · 0 评论 -
scala类型系统:17) 结构类型的细节问题
scala类型系统:17) 结构类型的细节问题这次聚会中分享的《scala类型系统》中,对于结构类型,有一页中有错误,纠正一下。这页ppt中,上面一行代码中的 {val name:String} 是结构类型,但下面一行中{val name="wang"}在这种情况下并不是结构类型,而是Early definition我们看一下scala规范里对Early d转载 2016-11-15 23:16:15 · 470 阅读 · 0 评论 -
scala类型系统:19) Manifest与TypeTag
scala类型系统:19) Manifest与TypeTagManifest是scala2.8引入的一个特质,用于编译器在运行时也能获取泛型类型的信息。在JVM上,泛型参数类型T在运行时是被“擦拭”掉的,编译器把T当作Object来对待,所以T的具体信息是无法得到的;为了使得在运行时得到T的信息,scala需要额外通过Manifest来存储T的信息,并作为参数用在方法的运行时上下文。转载 2016-11-29 23:26:02 · 377 阅读 · 0 评论 -
scala类型系统:18) 不稳定(volatile)类型
转载自:http://hongjiang.info/scala/ 推荐大家阅读下这位大哥出版的书《Scala函数式编程》转载 2016-11-17 23:27:18 · 2241 阅读 · 0 评论 -
scala类型系统:20) 数组类型
scala类型系统:20) 数组类型在java里,引用类型的数组类型是支持协变的,即 String[] 类型是 Object[] 的子类型,martin问过gosling,回答是希望有一个通用处理数组的简单方法。void sort(Object[] a, Comparator cmp) { … }数组的协变被用来确保任意参数类型的数组都可以传入排序方法。随着java引入了转载 2016-12-05 23:09:13 · 997 阅读 · 0 评论 -
Scala-偏函数与部分应用函数
scala中有PartialFunction的概念, 同时还要一个概念叫Partial Applied Function. 前者译作偏函数, 后者译作"偏应用函数"或"部分应用函数", 一字之差, 差距很大.1.偏函数首先我们介绍样本序列(Case sequences),从而具体介绍什么是偏函数。样本序列是一种特殊的函数,通常情况下函数只有一个入口,但是样本序列会有多个函数入口。比如下面的...原创 2016-08-26 19:44:48 · 1538 阅读 · 0 评论 -
scala细节-你不知道的'_'
'_'在scala一般都是作为占位符,比如下面过滤掉非整数的例子someNumbers.filter(x => x > 0)其等价于someNumbers.filter(_ > 0)如下是做为参数的占位符,需声明类型val f=(_:Int)+(_:Int)f(5,10) //15多个下划线指代多个参数,而不是单个参数的重复使用。第一个下划线代表第一个参数,第二个下划线代表第而个参数原创 2016-09-03 19:27:00 · 625 阅读 · 0 评论 -
Scala之旅-提前定义
其实我并不想深入学习它,就如书上说的“The syntax is so ugly that only a mother could love it.” (O(∩_∩)O哈哈~)下面是书上的蚂蚁案例//动物类,表示一般的动物可以感知前方10的单位的范围class Creature{ val range=10 val env=new Array[Int](range)}原创 2016-04-07 14:10:38 · 915 阅读 · 0 评论 -
scala类型系统:10) 交集类型与联合类型
scala类型系统:10) 交集类型与联合类型《快学scala》这本书(即《Scala for the Impatient》中文版)在介绍复合类型时提到它们也被成为“交集类型”,跟老高确认了一下,这块的英文原文是:In order to belong to the compound type, a value must belong to all of the individual转载 2016-11-09 09:51:43 · 700 阅读 · 0 评论 -
scala类型系统:9) this别名&自身类型
scala类型系统:9) this别名&自身类型看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为selfclass A { self => //this别名 val x=2 def foo = self.x + this.x }self不是关键字,可以用除了this外的任何名字命名(除关键字)。就转载 2016-11-09 09:51:29 · 615 阅读 · 0 评论 -
Scala之旅-面向对象
1.类的继承class Animal{ var gender:String=_ //重载构造器 def this(gender:String){ this //必须调用下主构造器 this.gender=gender }}class Human(name:String,age:Int) extends Animal{ def height=180原创 2015-10-07 19:05:39 · 958 阅读 · 0 评论 -
Scala之旅-集合操作
1.Tuple类似于C#里面的ArrayList可以存储多种类型的元素原创 2015-10-02 18:07:40 · 939 阅读 · 0 评论 -
Scala之旅-语法初窥
1.HellowWord类比C#,class->object 、函数定义使用def(类似Python)、定义数组使用Array[type]、连分号都省了object HelloWord{ def main(args:Array[String]){ println("HelloWord") }}2.简单函数调用object HelloWord{ //定义无返回值的原创 2015-10-02 13:27:21 · 903 阅读 · 0 评论 -
Scala之旅-高阶函数
1.函数作为参数对某对象进行什么样的操作暂时保留,之后让你来定义。这类似于Java中的内部类机制,如果你熟悉C#的委托,这就再也简单不过了。 //1.函数作为参数 //对a具体进行什么操作不知道,让fun来完成 def getResult(fun: Int => Int, a: Int): Int = { fun(a) } def mul(x: Int) = 2原创 2016-04-06 17:36:45 · 955 阅读 · 0 评论 -
Scala之旅-隐式转换
下面简要地介绍下scala的三种隐式类型,如果你熟悉C#中的扩展类,哪你应该会熟悉隐式类和隐式方法,没错,他们都是对一个类的方法进行扩展的1.隐式类隐式类和C#的类扩展基本一样,它是在scala2.10中引入的,具体看下面的例子比如我们要为scala的Int类添加一个add()方法//scala2.10隐式类-为Int添加了一个扩展方法add implicit clas原创 2016-04-17 23:24:15 · 582 阅读 · 0 评论 -
Scala细节-yield格式
yield格式for表达式每次执行都会产生一个新值(如例子中的arr)。当for表达式完成的时候,结果将包含了所有产生值得对象集合而yield可以在for中返回我们想要的对象。注意它的格式,若有花括号,则yield 在{}之外for(子句) yield {循环体}如下是个正确的例子val arrs=Array(1,2,3)val arrs2= for(arr<-arrs)原创 2016-09-03 19:00:51 · 1737 阅读 · 0 评论 -
scala类型系统:1) 类型与类
scala类型系统:1) 类型与类在Java里,一直到jdk1.5之前,我们说一个对象的类型(type),都与它的class是一一映射的,通过获取它们的class对象,比如 String.class, int.class, obj.getClass() 等,就可以判断它们的类型(type)是不是一致的。而到了jdk1.5之后,因为引入了泛型的概念,类型系统变得复杂了,并且因为j转载 2016-11-08 23:42:48 · 531 阅读 · 0 评论 -
scala类型系统:2) classOf与getClass方法的差异
scala类型系统:2) classOf与getClass方法的差异11条回复前一篇在提到获取Class时的两个方法:classOf 和 getClassscala> class Ascala> val a = new Ascala> a.getClassres2: Class[_ <: A] = class Ascala> classOf[A]res3:转载 2016-11-08 23:45:20 · 2186 阅读 · 0 评论 -
scala类型系统:3) 单例类型与this.type
scala类型系统:3) 单例类型与this.type对于单例类型(singleton type),在《scala impatient》这本书(中文版:快学scala)里有提到过,当时读的时候,扫了一下,以为就是指scala里用object定义的这种单例对象呢,没有仔细看,最近才发现其实singleton type 是所有实例都可以有scala> object Ascala>转载 2016-11-09 09:47:32 · 506 阅读 · 0 评论 -
scala类型系统:4) 内部类,路径依赖类型&类型投影
scala类型系统:4) 内部类,路径依赖类型&类型投影先回顾一下java的内部类class Outter{ public class Inner {} public void foo(Inner c){ System.out.println(c); }}public class Main { public static voi转载 2016-11-09 09:47:54 · 549 阅读 · 0 评论 -
scala类型系统:5) 结构类型
scala类型系统:5) 结构类型结构类型(structural type)为静态语言增加了部分动态特性,使得参数类型不再拘泥于某个已命名的类型,只要参数中包含结构中声明的方法或值即可。举例来说,java里对所有定义了close方法的抽象了一个Closable接口,然后再用Closable类型约束参数,而scala里可以不要求参数必须继承自Closable接口只需要包含close方法;如下转载 2016-11-09 09:49:29 · 935 阅读 · 0 评论 -
scala类型系统:6) 复合类型与with关键字
scala类型系统:6) 复合类型与with关键字上次上海scala聚会回来,把《快学scala》借给王福强看了几天,他写过一篇”scala for the impatient琐碎记录”,其中多Trait与继承的解读class A extends B with C with D with E 应做类似如下形式解读:class A extends (B with C w转载 2016-11-09 09:49:38 · 925 阅读 · 0 评论 -
scala类型系统:7) 中缀类型
scala类型系统:7) 中缀类型中缀类型并不是一种特殊的类型,只是针对带有2个类型参数的泛型类型在表达方式上允许用中缀形式而已。scala中的中缀表达在3个地方存在:操作符、模式匹配、类型声明1)中缀操作符最常见: a + b 或 x foo y 里的+和foo都是中缀操作符(严格的说scala里没有操作符,其实都是方法)。其中需要注意的一点是名称最后以“:”结尾的,转载 2016-11-09 09:50:16 · 923 阅读 · 0 评论 -
scala类型系统:8) type关键字
scala类型系统:8) type关键字scala里的类型,除了在定义class,trait,object时会产生类型,还可以通过type关键字来声明类型。type相当于声明一个类型别名:scala> type S = Stringdefined type alias S上面把String类型用S代替,通常type用于声明某种复杂类型,或用于定义一个抽象类型。场景1 用转载 2016-11-09 09:50:51 · 1814 阅读 · 0 评论 -
Scala之旅-class和object详解
1.classscala的类和C#中的类有点不一样,诸如: 声明一个未用priavate修饰的字段 var age,scala编译器会字段帮我们生产一个私有字段和2个公有方法get和set ,这和C#的简易属性类似;若使用了private修饰,则它的方法也将会是私有的。这就是所谓的统一访问原则。细节的东西太多,还是上代码在注释里面细讲吧//类默认是public级别的class Per原创 2015-10-04 22:23:59 · 43401 阅读 · 8 评论