Scala 柯里化、sortBy方法

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)
  }
}

相关推荐

  1. Scala sortBy方法

    2024-06-07 05:14:01       30 阅读
  2. 前端

    2024-06-07 05:14:01       26 阅读
  3. 函数 剖析

    2024-06-07 05:14:01       60 阅读
  4. 的实现

    2024-06-07 05:14:01       26 阅读
  5. 手写函数示例

    2024-06-07 05:14:01       23 阅读
  6. 一道经典的面试题

    2024-06-07 05:14:01       54 阅读
  7. 函数(function currying)及部分求值

    2024-06-07 05:14:01       48 阅读
  8. Python之函数进阶-

    2024-06-07 05:14:01       39 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-06-07 05:14:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-06-07 05:14:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-06-07 05:14:01       87 阅读
  4. Python语言-面向对象

    2024-06-07 05:14:01       96 阅读

热门阅读

  1. MC联机无法连接到服务器怎么解决

    2024-06-07 05:14:01       31 阅读
  2. 详细介绍机器学习

    2024-06-07 05:14:01       33 阅读
  3. 鸿蒙开发 一 (三)、ArkTS开发实战上

    2024-06-07 05:14:01       30 阅读
  4. 一些Mysql面试题

    2024-06-07 05:14:01       32 阅读
  5. 原生js 实现table 打印

    2024-06-07 05:14:01       28 阅读
  6. 交易中的预测和跟随

    2024-06-07 05:14:01       31 阅读
  7. UITableViewHeader自适应的几种方法

    2024-06-07 05:14:01       32 阅读
  8. 网络编程介绍(IP)(一)

    2024-06-07 05:14:01       28 阅读