Scala
zero__007
这个作者很懒,什么都没留下…
展开
-
Scala类详解
一个简单的Scala类:class Person { private var name: String = _ private var age = 0 def this(name: String, age: Int) { //实际上this是重载了主构造器,使用new Person()依然可以创建对象 this //默认构造器,即主构造器,class原创 2016-01-06 21:22:04 · 424 阅读 · 0 评论 -
lazy变量与双重检测锁(DCL)
转载自:http://hongjiang.info/scala-lazy-and-dcl/ scala里的lazy变量,背后的实现是个典型的双重检测锁(DCL)模式。比如:class A{ lazy val a=2} 对a的访问,先通过状态标记变量(做一次位与操作)判断是否已经初始化过。 通过scalac -Xprint:jvm来看对a转载 2016-06-25 10:36:51 · 532 阅读 · 0 评论 -
isInstanceOf与类型擦除
转载自:http://hongjiang.info/scala-pitfalls-11-type-erasure/ scala中用isInstanceOf判断一个对象实例是否是某种类型时,如果类型包含参数类型,会被擦除(jvm的做法)。所以会导致例如下面的问题:scala> (1,2).isInstanceOf[Tuple2[String,String]]:14: war转载 2016-06-25 10:27:54 · 1061 阅读 · 0 评论 -
Type与Class、ClassTag与TypeTag
Scala中获取Class的方式:scala> class Adefined class Ascala> val a = new Aa: A = A@17a1e4cascala> a.getClassres10: Class[_ <: A] = class Ascala> classOf[A]res11: Class[A] = class A 上面显示了两者的不转载 2016-06-25 10:24:00 · 3869 阅读 · 0 评论 -
可变和不可变集合的+=操作含义
转载自:http://hongjiang.info/scala-pitfalls-22/可变和不可变集合的 += 操作含义不同: 不可变 imSet += newEle 等价于 imSet = imSet + newEle 可变 mSet += newEle 等价于 mSet.+=(newEle) 是方法而非操作符举个例子:如下一段代码:var转载 2016-06-25 10:17:54 · 14055 阅读 · 0 评论 -
for表达式的背后
转载自:http://hongjiang.info/scala-pitfalls-3/了解一下for表达式转换的细节:for((key,value) <- m; name=key) { println(name)}这里有一个map,里面有一些自定义类型的数据,然后在用上面的for进行操作,运行时会发现上面的代码时发现key的hashCode会被调用。而使用下面的写法则没有问题转载 2016-06-25 10:10:17 · 494 阅读 · 0 评论 -
Scala类(续)
在Scala里,继承一个父类类似Java很相似,只是需要注意的是:1.重写父类方法必须用override关键字;2.只有主构造函数才能向父类构造函数中传参数。 Scala的父构造函数必须调用主构造函数或则另一个副构造函数函数。只要在主构造函数中才能向基类的构造函数传参数。class Person(val name: String, val age: Int) { }cla原创 2016-04-02 17:02:12 · 495 阅读 · 0 评论 -
Scala常用代码
遍历var arr = Array("001a", "001b", "002a")for (a <- arr) { print(a + " ")}println()for (i <- 0 to arr.length - 1) { print(arr(i) + " ")}println()for (i <- 0 until arr.length) { pri原创 2016-02-21 19:50:33 · 2118 阅读 · 0 评论 -
Scala的trait
特质(trait)是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。与类的继承时每个类都只能继承唯一的超类不同,类可以混入任意多个特质。trait TraitA { def fun() { println("this is traitA") }}class A extends TraitA{ overrid原创 2016-02-21 19:40:35 · 461 阅读 · 0 评论 -
twitter的Future的简单使用
直接上示例:获取一个Futute:def getFuture3: Future[String] = { FuturePool.unboundedPool { println("begin future3") println(Thread.currentThread().getName) TimeUnit.SECONDS.sleep(3原创 2016-03-04 17:38:50 · 1412 阅读 · 0 评论 -
Scala单元测试
转载自: http://blog.sina.com.cn/s/blog_a3869e9a01017dcn.htmlScala 的单元测试可以使用Java的JUnit 或 Scala的ScalaTest、ScalaCheck等等。简单示例: ScalaTest 提供了若干编写测试的方法,最简单的就是创建扩展 org.scalatest.Suite的类并在这些类转载 2016-03-04 17:12:15 · 8038 阅读 · 0 评论 -
Scala基础
数据类型Byte(8位)、Short(16位)、Int(32位)、Long(64位)、Double(64位)、Float(64位)、Boolean、Char、String与Java中的数据类型相对应,除了String是java.lang.String,其它的都是scala包自己的类。变量定义Scala有两种变量,val与var。val类似java中的final变量,而var原创 2016-01-06 21:35:35 · 383 阅读 · 0 评论 -
lambda表达式中的return
Scala版:object Test { def main(args: Array[String]) { val list = List("A", "B", "C") list.foreach(s=>{ if (s == "C") { println("ok, do something.")原创 2016-11-20 15:11:51 · 13760 阅读 · 0 评论