scala
雄鸡
这个作者很懒,什么都没留下…
展开
-
Scala学习笔记5 (集合 Collections)
5. util包5.1. 架构http://www.scala-lang.org/docu/files/collections-api/collections.htmlThe following figure shows all collections in package scala.collection. These are all high-level转载 2016-10-07 18:34:21 · 1380 阅读 · 0 评论 -
Scala中Abstract Types 成员
一、Abstract Types 概念所谓Abstract Types 成员, 是指trait ,class , Abstract class 使用 type 关键字 来定义类型,让实现类来指定具体的类型, 如:trait Reader{ type In <:java.io.Serializable //这里使用type定义的In类型,但并没有指明In是什么类型 type Con原创 2015-07-20 23:50:08 · 677 阅读 · 0 评论 -
Scala中Dependency Injection
依赖注入是指 依赖对象的创建,由第三方完成,而不是被依赖对象,我们将这种控制关系的转移,称为依赖注入或者控制反转。在spring 的ioc 就是经典的案例。通过配置文件和反射机制,将依赖对象的创建交给spring 容器来完成。spring 的ioc 优缺点: 优点: 可插拔 缺点: (1)生成一个对象的步骤变复杂了 (2)对象生成因为是使用反射编程,在效率上有些损耗 (3)缺少IDE重构操原创 2015-07-19 23:35:45 · 1643 阅读 · 1 评论 -
自身类型(self type)
看scala的源码的话很发现很多源码开头都有一句:self => 这句相当于给this起了一个别名为selfclass Self { self => //代表this指针 ,也就是说 self 就 this的别名 val tmp = "scala" def foo = self.tmp + this.tmp}self不是关键字,可以用除了this外的任何名字命名(除关原创 2015-07-18 15:16:44 · 2846 阅读 · 0 评论 -
第71讲 Scala界面Panel、Layout
实例代码如下/** * Created by zhiwang on 2015/7/28. */import scala.swing.SimpleSwingApplicationimport scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientatio原创 2015-07-28 23:18:47 · 874 阅读 · 0 评论 -
第68讲 scala并发编程原生线程actor、class class 下的消息传递和偏函数
上一节讲了actor message 是通过message 向actor 的发送消息,开发者只需要向actor 发送消息,不需要关心actor与线程更高程度的抽象。其实scala 也可以当线程当actor 使用Scala的原生线程(Main主线程)当 Actorimport scala.actors.Actorimport scala.actors.Actor._case class Person原创 2015-07-28 07:28:41 · 931 阅读 · 0 评论 -
第69讲 scala并发编程 react 、loop 编程
上一节我们讲了,actor的receive 偏函数,它属于 每请求没线程模式,用完了就销毁。 有没有线程共享,请看本文。scala 为了提升性能,有2种共享线程方式,一种是使用react ,另一种是 loop方法。一、 react 方式代码如下: def act(): Unit ={ react{ case NameToIp(name,actor)=>原创 2015-07-28 22:03:26 · 846 阅读 · 0 评论 -
第6讲 Map、Tuple操作
Map 、Tuple 是scala 中比较常见的数据类型,在spark 中经常使用。实例代码: //一、不可变map操作 //1.不可变map定义 val map = Map("book" -> 10, "gun"->18,"ipad" -> 1000) println("map=" + map) //2. map的取值 var book = map.getOr原创 2015-07-29 22:35:25 · 1491 阅读 · 0 评论 -
第70讲:Scala界面GUI编程入门
实例代码import scala.swing._object Hello_Gui extends SimpleSwingApplication{ def top = new MainFrame{ time = "hello, scala gui" contents = new Button{ text = "scala => spark!!!" } }}原创 2015-07-28 22:46:38 · 2715 阅读 · 0 评论 -
第79讲:单例深入讲解及单例背后的链式表达式
在Scala中,表达单例的一种语法,就是object对象,如果此对象有伴生类的话,此对象就是伴生对象,被用作公共方法或者成员字段的存储区。其实每一个对象都有单例类型,如:/** * 单例深入讲解及单例背后的链式表达式 * Created by zhiwang on 2015/8/9. */import scala.reflect.runtime.universe._object Scala1原创 2015-08-09 15:25:10 · 757 阅读 · 0 评论 -
第72讲 Scala界面事件处理编程
GUI 设计中,事件处理是非常重要的一块,用来与用户人机交互、处理业务逻辑等。以下是scala 事件编程入门实例,仅供参考。import scala.swing.MainFrameimport scala.swing.Buttonimport scala.swing.Labelimport scala.swing.Orientationimport scala.swing.BoxPanel原创 2015-07-30 22:37:30 · 1348 阅读 · 0 评论 -
第75讲:模式匹配下的For循环
For 循环中的模式匹配,可以过滤数据,数据处理方面使用。 for(i<-List(1,2,3,4,5)) println(i) //实际上调用的是foreach for(index@"Flink" <- List("hadoop","spark","Flink")) println(index)//为参数起了个别名进行匹配 for((language,"hadoop") <-原创 2015-08-03 23:37:55 · 661 阅读 · 0 评论 -
context bounds
与view bounds一样context bounds(上下文界定)也是隐式参数的语法糖。context bounds的出现是scala2.8版本才增加的,起因是2.8版本修正了数组类型的设计(关于这个话题后续单独讨论),同时为语法上的方便,引入了”上下文界定”这个概念。看一个简单的例子,对于比较两个数的大小,采用隐式参数的做法:scala> def max[T](a:T, b:T) (impli转载 2015-11-29 21:17:45 · 667 阅读 · 0 评论 -
Manifest与TypeTag
Manifest是scala2.8引入的一个特质,用于编译器在运行时也能获取泛型类型的信息。在JVM上,泛型参数类型T在运行时是被“擦拭”掉的,编译器把T当作Object来对待,所以T的具体信息是无法得到的;为了使得在运行时得到T的信息,scala需要额外通过Manifest来存储T的信息,并作为参数用在方法的运行时上下文。def test[T] (x:T, m:Manifest[T]) { … }转载 2015-11-29 21:11:07 · 533 阅读 · 0 评论 -
scala 参考文档
http://twitter.github.io/scala_school/zh_cn/pattern-matching-and-functional-composition.html原创 2015-09-20 00:05:29 · 1166 阅读 · 0 评论 -
scala apply方法 笔记
Scala比Java更面向对象的一个方面是Scala没有静态成员。替代品是,Scala有单例对象:singleton object。当单例对象与某个类共享同一个名称时,他被称作是这个类的伴生对象:companion object。你必须在同一个源文件里定义类和它的伴生对象。类被称为是这个单例对象的伴生类:companion class。类和它的伴生对象可以互相访问其私有成员。定义单例对象不是定义类型原创 2015-09-19 17:08:05 · 22224 阅读 · 3 评论 -
第26讲:Scala中模式匹配入门
scala 中,模式匹配与消息传递的威力无穷,本节是 模式匹配的入门,主要讲解 模式匹配的基本语法。scala 中模式匹配使用 match case 的语法,与其他语言如java 的swith 相似,不同的是,scala 既可以接受常量,也可以接受变量,同时对数据类型没有强制要求,既可以是基本类型,也可以是自定义类型。本节主要是常量、变量的内容一、匹配常量示例代码 val result = 1原创 2015-08-05 06:50:15 · 890 阅读 · 0 评论 -
第76讲:模式匹配下的赋值语句
赋值操作背后的模式匹配,赋值过程可能返回多个值,此时为了接受多个值,我们可能用tuple定义几个变量来处理。实例代码,如下 //@是别名的意思,a@b形成了tuple2二元元组 //把1000赋值给a和b,并返回二元组的内容给val a@b var a@b = 1000 println("a=" + a + ",b=" + b) b = 200原创 2015-08-04 22:43:01 · 505 阅读 · 0 评论 -
第85讲:Scala中For表达式 实现高阶函数的效果
下面的例子,是打印 母子的姓名样本类case class Person(name: String, isMale: Boolean, children: Person*)用高级函数实现 def main(args: Array[String]) { val lauren = Person("Lauren", true) val rocky = Person("rocky", fals原创 2015-08-16 12:44:10 · 864 阅读 · 2 评论 -
第82讲:Scala中List的ListBuffer实现高效的遍历计算
我们通过对比下列3组程序,对比,发现优缺点第一组: 递归代码 def main(args: Array[String]) { val data = 1 to 20000 val currntTime =System.currentTimeMillis() increase(data.toList) println("used time=" + (System.curren原创 2015-08-16 10:49:02 · 9643 阅读 · 0 评论 -
第74讲:从Spark源码的角度思考Scala中的模式匹配
今天学习了从源码角度去分析scala中的模式匹配的功能。让我们看看源码中的这一段模式匹配:从代码中我们可以看到,case RegisterWorker(id,workerHost,……..){}这里为模式匹配,而我们的模式匹配类RegisterWorker之前就已定义好,如下图: 我们可以看到,我们的模式匹配类是已经定义好的,当我们的master接收到worker发来的消息时,进行模式匹配:这里还原创 2015-08-03 22:43:08 · 736 阅读 · 0 评论 -
第28讲:Scala提取器Extractor
所谓提取器,就是从表达式获取具体值。 其作用,可以根据某一规则,非常方便的获取到想要的值提取器在数组的应用实例代码 def match_arr(arr:Any) = arr match{ case Array(0) => println("array:" + 0) //判断arr是数组,并且只有一个元素,该值为0的规则 case Array(x,y) => println(原创 2015-08-09 08:44:40 · 2391 阅读 · 0 评论 -
第61讲 scala 中隐式转换执行过程分析
一、隐式转换概念java 有很庞大的类库资源,但是 被声明成 final 的类不允许继承 例如 String , 怎样扩展java及第三方类库 scala提供了很灵活的方式当 scala 使用 implicit 隐式转化时 , scala 编辑器发现对象的类型不匹配时,不会直接报错,而会在代码中尝试匹配implicit声明的object, 当然,相同方法签名的类必须唯一。 举个小例子,实现在字符原创 2015-07-21 00:59:37 · 1011 阅读 · 0 评论 -
scala 中配置文件之 config
Typesafe的Config库,纯Java写成、零外部依赖、代码精简、功能灵活、API友好。支持Java properties、JSON、JSON超集格式HOCON以及环境变量。它也是Akka的配置管理库.Overview纯java实现,无任何依赖充分的测试支持: Java properties, JSON, and a human-friendly JSON superset可以合并各种格原创 2015-08-08 10:58:59 · 20462 阅读 · 0 评论 -
第65讲scala 中的隐式对象分析
信息来源于 DT大数据梦工厂微信公众号:DT_Spark一、what is 隐式对象所谓隐式对象 : 就是用 implicit object 定义的对象,其作用主要表现在 运行时 被调用 如: implicit object StringAdd extends SubTemplate[String]{ override def add(x: String, y: String)原创 2015-07-24 00:24:15 · 1496 阅读 · 2 评论 -
scala Map类型笔记
//构造不可变的map val smap = Map("rocky" -> 27,"rocky1" -> 30) //smap += ("zhangsan" -> 88) // 不可变) //构造可变map val user =scala.collection.mutable.Map("rocky" -> 27,"rocky1" -> 30) printl原创 2015-05-25 20:12:22 · 11389 阅读 · 0 评论 -
scala 隐式转换
上下文界定比如:比较任意两个对象的大小1.基于scala已定义类型的泛型的上下文界定 必须显示 指明 T具有 T=> Ordered[T] 特征, example1:def smaller[T](a:T, b:T)(implicit order:T=> Ordered[T]) = if(a < b) a else bscala>smaller(1,2) 12.基于自定义类型的泛型的上下文界定原创 2015-05-24 12:22:10 · 1135 阅读 · 0 评论 -
Scala 强大的集合数据操作示例
Scala是数据挖掘算法领域最有力的编程语言之一,语言本身是面向函数,这也符合了数据挖掘算法的常用场景:在原始数据集上应用一系列的变换,语言本身也对集合操作提供了众多强大的函数,本文将以List类型为例子,介绍常见的集合变换操作。一、常用操作符(操作符其实也是函数)++ ++[B](that: GenTraversableOnce[B]): List[B] 从列表的尾部添加另外一个列表++: ++:转载 2015-05-23 18:03:55 · 98034 阅读 · 11 评论 -
scala collection笔记
整理中原创 2015-05-31 21:15:43 · 555 阅读 · 0 评论 -
scala io操作
1. 读文件scala特有的是scala.io.Source,例如: import scala.io._ Source.fromFile(“cn.scala”,”utf8”).mkString逐行读文件内容: Source.fromFile(new java.io.File(“cn.scala”)).getLines().foreach(println)2. 写文件import java.io原创 2015-05-31 12:08:36 · 4316 阅读 · 0 评论 -
scala programming 原代码
A Scalable Language First Steps in Scala Next Steps in Scala Classes and Objects Basic Types and Operations Functional Objects Built-in Control Structures Functions and Closures Control Abstrac原创 2015-05-23 11:58:53 · 798 阅读 · 0 评论 -
scala xml操作
拆解xml 方法有以下三种方式,见代码:/** * 拆解xml */class SplitXml {}object SplitXml{ def main(args: Array[String]): Unit = { val valxml = <a> sounds <tag/> good</a> //1. 抽取文本 val extractText = val原创 2015-05-12 00:37:01 · 3355 阅读 · 0 评论 -
第66讲scala 中伴生对象的隐式转换
信息来源于 DT大数据梦工厂微信公众号:DT_Spark代码如下:/** * 伴生对象 中的隐式方法 * Created by zhiwang on 2015/7/24. */import java.io.Fileimport scala.io.Sourceclass RichFile2(val file:File) { def read = Source.fromFile(file.原创 2015-07-24 22:39:39 · 694 阅读 · 0 评论 -
线程通信机制
线程通信机制:共享内存 VS 消息传递在并发编程中,我们必须考虑的问题时如何在两个线程间进行通讯。这里的通讯指的是不同的线程之间如何交换信息。目前有两种方式: 1、共享内存 2、消息传递(actor 模型)共享内存共享内存这种方式比较常见,我们经常会设置一个共享变量。然后多个线程去操作同一个共享变量。从而达到线程通讯的目的。例如,我们使用多个线程去执行页面抓取任务,我们可以使用一个共享变量cou转载 2015-08-08 12:02:37 · 630 阅读 · 0 评论 -
第63讲Scala中隐式参数与隐式转换的联合使用解析
函数参数与隐式转换在scala和spark 中经常出现,让隐式参数与隐式转换的联合使用,请看一下实例:/** * 隐式类型的隐式转换 * Created by zhiwang on 2015/7/21. */class Student(val name:String, val age: Int) extends Ordered[Student]{ override def compa原创 2015-07-21 23:43:11 · 688 阅读 · 0 评论 -
scala 中协变与逆变
到上次为止由羽生田先生介绍了Scala语法的特点,这一讲我作为嘉宾来介绍一下Scala的类型系统和相关功能。本次介绍的重点是Java与 Scala之间类层次的差异、范型的协变与逆变、实存类型(Existential Type)、结构类型(Structural Type)和复合类型(Compound Type)。与Java相似之处Scala类型系统的基础部分是与Java非常相像的。Scala与Java转载 2015-08-09 16:57:24 · 2844 阅读 · 1 评论 -
第81讲:Scala中List的构造是的类型约束逆变、协变、下界
关于逆变与协变相关知识,可以参考之前的章节。 这里主要是对 list 中 cons(::) 操作过程讲解代码abstract class Big_Dataclass Hadoop extends Big_Dataclass Spark extends Big_Dataobject List_Constructor_Internals { def main(args: Array[Stri原创 2015-08-09 18:06:12 · 566 阅读 · 0 评论 -
第78讲:scala 中Type与Class初步学习
概要由于在scala中非常强调泛型或者说类型系统 ,Java和scala是基于jvm的, java1.5以前具体对象的类型与class一一对应,后来引入泛型,如字符串数组或整数数组,都是数组 ,但其实类型是不一样的,在虚拟机内部,并不关心泛型或类型系统。 对泛型支持是基于运行时角度考虑的,在虚拟机中泛型被编译运行时是被擦除的, 在运行时泛型是通过反射方式获取。一、type 与 class 概念原创 2015-08-09 12:34:19 · 3528 阅读 · 0 评论 -
第77讲:模式匹配下的提取器过程分析
概要所谓模式匹配下的提取器,就是模式匹配与提取器的结合。 关于提取器可以参考scala 中的 提取器示例代码这里主要是通过 object 对象的 unapply 在模式匹配的应用object :>{ //定义提取器 :> def unapply[A](list:List[A]) = { Some(list.init,list.last) }}object Extract原创 2015-08-09 11:06:55 · 691 阅读 · 0 评论 -
第64讲Scala中的隐式类分析
一、隐式类概念所谓隐式类: 就是对类增加implicit 限定的类,其作用主要是对类的加强!如: implicit class ImpInt(tmp:Int){ def add(tmp2: Int) = tmp + tmp2 }class 前面的 implicit ,通过这个隐式类,就可以让Int型数据具有 add 方法。二、隐式类型实例import scala.io.Source原创 2015-07-22 23:51:42 · 1878 阅读 · 0 评论