Trait像拥有部分实现的接口,它提供一个介于单一继承和多重继承的中间地带,可以在其它类中混入它们,这样就可以用一组特性对类进行增强。用关键字with可以混入更多的trait。如果类已经继承了类,就可以使用with混入trait,trait和抽象类的区别在于抽象类是对一个继承链的,类和类之前确实有父子类的继承关系,而trait则如其名字,表示一种特征,可以多继承。
Case class和class的区别:
1、 初始化的时候可以不用加new,也可以加
2、 toString实现得更加漂亮
3、 默认实现了equals和hashCode
4、 默认是可序列化的,serializable
5、 自动从scala.Product里面继承一些函数
6、 构造函数的参数是public的
7、 支持模式匹配。match{ case => }
Object类似没有参数的class,用来模式匹配和传递消息。在object下的成员全部都是静态的,如果在类中声明了与该类相同的名字的object则该object是该类的“半生对象”,可以理解把类中的static集中放到了object对象中,伴生对象和类文件必须是同一个源文件,可以用伴生对象做一些初始化的操作。
Override是覆盖,overload是重载。
a!b是用来给前一个a对象发送后一个消息b
//原始方法:
//vallist=List("abc","bcd","cde")
scala>list.sortWith( (s,t) => s.compareTo(t) <0 )
res1:List[String] = List(abc,bcd,cde)
//匿名方法:
scala>list.sortWith( _.compareTo(_) <0 )
res2:List[String] = List(abc,bcd,cde)
//上述为字典序递增,若递减则改'<'为'>'即可
//获取参数
def getUrlParams: Map[String, String] = {
val paramStr =
Option(dom.document.getElementById("fakeUrlSearch"))
.map(_.innerHTML).getOrElse(dom.window.location.search)
val str1= paramStr.substring(1)
val pairs= str1.split("&").filter(s => s.length > 0)
val tmpMap= pairs.map(_.split("=", 2)).filter(_.length== 2)
tmpMap.map(d => (d(0), d(1))).toMap
}
def formatyyyyMMdd(date: Date) = { val y = date.getFullYear() val m = date.getMonth() + 1 match { case x if x <= 9 => "0" + x case x => x.toString } val d = date.getDate() match { case x if x <= 9 => "0" + x case x => x.toString } y + m + d }
compose
compose
组合其他函数形成一个新的函数 f(g(x))
scala> val fComposeG = f _ compose g _
fComposeG: (String) => java.lang.String = <function>
scala> fComposeG("yay")
res0: java.lang.String = f(g(yay))
andThen
andThen
和 compose
很像,但是调用顺序是先调用第一个函数,然后调用第二个,即g(f(x))
scala> val fAndThenG = f _ andThen g _
fAndThenG: (String) => java.lang.String = <function>
scala> fAndThenG("yay")
res1: java.lang.String = g(f(yay))