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的差别
第一个是传入方法体,在传入时会立刻执行。
第二个是指传入的方法名,是一个无参数的匿名函数。
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的差别
第一个是传入方法体,在传入时会立刻执行。
第二个是指传入的方法名,是一个无参数的匿名函数。