
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 · 452 阅读 · 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 · 558 阅读 · 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 · 1095 阅读 · 0 评论 -
Type与Class、ClassTag与TypeTag
Scala中获取Class的方式: scala> class A defined class A scala> val a = new A a: A = A@17a1e4ca scala> a.getClass res10: Class[_ <: A] = class A scala> classOf[A] res11: Class[A] = class A 上面显示了两者的不转载 2016-06-25 10:24:00 · 3909 阅读 · 0 评论 -
可变和不可变集合的+=操作含义
转载自:http://hongjiang.info/scala-pitfalls-22/ 可变和不可变集合的 += 操作含义不同: 不可变 imSet += newEle 等价于 imSet = imSet + newEle 可变 mSet += newEle 等价于 mSet.+=(newEle) 是方法而非操作符 举个例子:如下一段代码: var转载 2016-06-25 10:17:54 · 14085 阅读 · 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 · 517 阅读 · 0 评论 -
Scala类(续)
在Scala里,继承一个父类类似Java很相似,只是需要注意的是:1.重写父类方法必须用override关键字;2.只有主构造函数才能向父类构造函数中传参数。 Scala的父构造函数必须调用主构造函数或则另一个副构造函数函数。只要在主构造函数中才能向基类的构造函数传参数。 class Person(val name: String, val age: Int) { } cla原创 2016-04-02 17:02:12 · 519 阅读 · 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 · 2158 阅读 · 0 评论 -
Scala的trait
特质(trait)是Scala里代码复用的基础单元。特质封装了方法和字段的定义,并可以通过混入到类中重用它们。与类的继承时每个类都只能继承唯一的超类不同,类可以混入任意多个特质。 trait TraitA { def fun() { println("this is traitA") } } class A extends TraitA{ overrid原创 2016-02-21 19:40:35 · 486 阅读 · 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 · 1467 阅读 · 0 评论 -
Scala单元测试
转载自: http://blog.sina.com.cn/s/blog_a3869e9a01017dcn.html Scala 的单元测试可以使用Java的JUnit 或 Scala的ScalaTest、ScalaCheck等等。 简单示例: ScalaTest 提供了若干编写测试的方法,最简单的就是创建扩展 org.scalatest.Suite的类并在这些类转载 2016-03-04 17:12:15 · 8079 阅读 · 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 · 404 阅读 · 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 · 13894 阅读 · 0 评论