Scala高级特性
小白的Scala学习笔记 2024/5/30 8:42
柯里化
参数可以写在两个括号里面
object TestKeli {
def add(a:Int)(b:Int)=a+b
def main(args: Array[String]): Unit = {
val res = add(22)(33)
println(res)
}
}
可以填隐式参数,传一个默认值,调用的时候只需要传一个参数
object TestKeli {
implicit val c:Int=3
//b给个默认值,调用的时候不需要传递,把参数变成隐式参数
//当我们使用柯里化后,如果有参数是隐式的话,那么,Scala会自动上下文搜索对应的变量
def add(a:Int)(implicit b:Int)=a+b
def main(args: Array[String]): Unit = {
val res = add(22)
println(res)
}
}
sortBy方法
这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序
sortBy方法,需要的Ordering类型的隐式参数
Ordering对象,能指导两个变量的大小
用隐式参数实现
object TestSortBy {
//Ordering对象,能指导两个变量的大小,通过下面的方法做减法,就能判断谁大谁小
implicit val ord=new Ordering[Stu]()//sortBy方法,需要的Ordering类型的隐式参数
{
override def compare(x:Stu,y:Stu): Int =x.sage-y.sage//这里如果改成y.sage-x.sage,就能实现降序排序
}
case class Stu(snams:String,ssex:String,sage:Int)
def main(args: Array[String]): Unit = {
val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",22),Stu("zhangsan3","nan",29),Stu("zhangsan4","nan",12))
//这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序
val res = list.sortBy(x => x)//sortBy 方法使用了柯里化,需要一个Ordering的隐式参数
println(res)
}
}
用隐式转换实现
object TestSortBy {
//用隐式转换实现
implicit def toStu(stu: Stu)=new Ordered[Stu]() {
override def compare(that: Stu): Int = that.sage-stu.sage
}
case class Stu(snams:String,ssex:String,sage:Int)
def main(args: Array[String]): Unit = {
val list=List(Stu("zhangsan1","nan",21),Stu("zhangsan2","nan",22),Stu("zhangsan3","nan",29),Stu("zhangsan4","nan",12))
//这个方法会生成一个排序好的List(这里是按sage升序排序的),不改变原List的顺序
val res = list.sortBy(x => x)//sortBy 方法使用了柯里化,需要一个Ordering的隐式参数
println(res)
}
}