scala学习小结
scala学习总结
1.scala中map的几种常用遍历方式.
2.Sealed class的含义
匹配的case class是无法穷举的,Sealed class只能在和他相同的文件中定义子类,所以只需要关注当前文件的case class匹配的列举,并且如果列举不全则编译时有Warning。
3.trait的理解。
trait中可以包含未实现的方法,也可以包含已实现的方法
trait中的方法实现实际上是被放到一个特殊的辅助类中,这个类在每次调用方法时被引用到,使用这种方法我们不需要将方法体拷贝到每个扩展该trait的的类中去。
trait不能像class那样带型参calss xxx(val sss:String) 合法
trait xxx(val sss:String)不合法
4.yield 关键字
针对每一次 for 循环的迭代, yield 会产生一个值,被循环记录下来 (内部实现上,像是一个缓冲区).
当循环结束后, 会返回所有 yield 的值组成的集合.
返回集合的类型与被遍历的集合类型是一致的.
5.code : => Unit与code: ()=>Unit的差别
第一个是传入方法体,在传入时会立刻执行。
第二个是指传入的方法名,是一个无参数的匿名函数。
1.scala中map的几种常用遍历方式.
postData.map(k => { println(k._1) println(k._2) //println(v) }) postData.foreach(k => { println(k._1) println(k._2) }) for((k,v) <- postData) yield{ println(k) println(v) }
2.Sealed class的含义
匹配的case class是无法穷举的,Sealed class只能在和他相同的文件中定义子类,所以只需要关注当前文件的case class匹配的列举,并且如果列举不全则编译时有Warning。
sealed abstract class Expr case class Var(name: String) extends Expr case class Number(num: Double) extends Expr case class UnOp(operator: String, arg: Expr) extends Expr def describe(e: Expr): String = e match{ case Number(x) => "a number" case Var(_) => "a variable" }
3.trait的理解。
trait中可以包含未实现的方法,也可以包含已实现的方法
trait中的方法实现实际上是被放到一个特殊的辅助类中,这个类在每次调用方法时被引用到,使用这种方法我们不需要将方法体拷贝到每个扩展该trait的的类中去。
trait不能像class那样带型参calss xxx(val sss:String) 合法
trait xxx(val sss:String)不合法
4.yield 关键字
针对每一次 for 循环的迭代, yield 会产生一个值,被循环记录下来 (内部实现上,像是一个缓冲区).
当循环结束后, 会返回所有 yield 的值组成的集合.
返回集合的类型与被遍历的集合类型是一致的.
5.code : => Unit与code: ()=>Unit的差别
第一个是传入方法体,在传入时会立刻执行。
第二个是指传入的方法名,是一个无参数的匿名函数。