Scala 柯里化、sortBy方法

Scala高级特性

小白的Scala学习笔记 2024/5/30 8:42

文章目录

柯里化

参数可以写在两个括号里面

scala 复制代码
object TestKeli {
  def add(a:Int)(b:Int)=a+b
  def main(args: Array[String]): Unit = {
    val res = add(22)(33)
    println(res)
  }
}

可以填隐式参数,传一个默认值,调用的时候只需要传一个参数

scala 复制代码
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对象,能指导两个变量的大小

用隐式参数实现

scala 复制代码
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)
  }
}

用隐式转换实现

scala 复制代码
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)
  }
}
相关推荐
智者知已应修善业5 小时前
【输入两个数字,判断两数相乘是否等于各自逆序数相乘】2023-10-24
c语言·c++·经验分享·笔记·算法·1024程序员节
集3045 小时前
C++多线程学习笔记
c++·笔记·学习
知南x5 小时前
【正点原子STM32MP157 可信任固件TF-A学习篇】(2) STM32MP1 中的 TF-A
stm32·嵌入式硬件·学习·stm32mp157
YJlio5 小时前
Active Directory 工具学习笔记(10.0):AdExplorer / AdInsight / AdRestore 导读与场景地图
网络·笔记·学习
子夜江寒6 小时前
Python 学习-Day8-执行其他应用程序
python·学习
广东数字化转型6 小时前
工作备注笔记
笔记
超高校级的作者6 小时前
博客摘录「 CentOS7 Fail2ban安装使用」2024年4月15日
笔记
●VON6 小时前
从单机应用到分布式调度:基于 HarmonyOS 构建车-空协同任务引擎
学习·华为·harmonyos·openharmony·开源鸿蒙
万变不离其宗_87 小时前
http学习笔记
笔记·学习
盐焗西兰花7 小时前
鸿蒙学习实战之路 - 避免冗余刷新最佳实践
学习·华为·harmonyos