scala note

trait(特质)未被实现的方法,默认就是抽象的

trait Logger {
  def log(message: String) // like an abstract method
}

implementing of derived class

class CosoleLogger extends Logger {
  def log(message: String) { println(message) } // 可不需要override
}

注意: 当特质改变时, 有被mix-in的类都必须重新编译。

在scala中应避免使用foreach,foreach没有返回值也就是Unit,在函数式编程中不返回任何结果的操作,很有可能进行有副作用的操作.

for ( x <- 1 to 5 ) {
  // 无法返回任何值
  println(x)
}
//等同于foreach
(1 to 5).foreach { x=> 
 //无法返回任何值
 println(x)
}

yield在scala中与c#意义完全不同,yield相当于c#中的select加上toList. 或toArray等等,是List还是Array这取决于原来的集合对象类型.

map方法的作用很大,可将原来的值或对象进行转换或运算成另一个结果,特别是搭配Option[A]后在处理Null的问题上起了很大的作用,后面会提到.

for ( x <- 1 to 5 ) yield x
res51: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)
//等同于map (1 to 5).map(x => x)
res52: scala.collection.immutable.IndexedSeq[Int] = Vector(1, 2, 3, 4, 5)

//结论:返回的结果res51和res52无二致
 
原文地址:https://www.cnblogs.com/jHenry/p/4280474.html