当前位置: 首页 > news >正文

11.scala函数进阶

目录

  • 概述
  • 函数
    • scala函数和方法的区别
      • 第一种
      • 第二种
      • 方法转函数
    • 函数柯里化
  • 结束

概述

函数 vs 方法

  • 1.定义
    • 方法:def
    • 函数:=>
  • 2.方法本质上是一个特殊的函数
  • 3.函数是一等公民,函数可以当做值来传递,方法的参数,返回值

函数

scala函数和方法的区别

第一种

var/val 函数名称 = (参数列表) => {函数体}

object FunctionDemo {def main(args: Array[String]): Unit = {test01()}/*** 函数定义:第一种* var/val 函数名称 = (参数列表) => {函数体}*/def test01() = {// f1:函数名称// (Int,Int) :参数列表// 返回值val f1 = (a: Int, b: Int) => {a + b}println(f1(4, 5))}
}

执行结果如下:
在这里插入图片描述

第二种

val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}

object FunctionDemo {def main(args: Array[String]): Unit = {test02()}/*** 函数的定义方式二* val/var 函数名称:(入参类型) => 返回值类型 =(入参的引用) => {函数体}*/def test02(): Unit = {val f2: (Int, Int) => Int = (a: Int, b: Int) => {a + b}val f3: (Int, Int) => Int = (a, b) => {a + b}println(f2(3, 2))}
}

执行结果如下:
在这里插入图片描述

方法转函数

在Scala中,方法本身并不是值,而是函数。因此,一个方法不能直接赋值给一个val变量,但是可以将方法转换为函数并进行赋值。

object FunctionDemo {def main(args: Array[String]): Unit = {test03()}def test03(): Unit = {def sayHello(name: String): Unit = {println(s"Hell:$name")}// 将方法赋值给一个函数、变量:空格 下划线// 下划线 总结val sayHelloFunc = sayHello _sayHelloFunc("测试方法变函数")def add(a: Int, b: Int) = a +  bval add1 = add _println(add1(1, 2))val add2: (Int, Int) => Int = add// 将函数当方法的参数def foo(op:(Int,Int) => Int) = {op(10, 20)}println(foo(add2))def foo2(op:()=>Unit)={op()}def m =println("hello world")foo2(m _)}
}

执行结果:
在这里插入图片描述

函数柯里化

只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数

来看一下 js 中的柯里化与 scala 的实现区别。

// 非柯里化
function add(x, y) {return x + y;
}add(1, 2) === 3; // true// 柯里化
function addX(y) {return function(x) {return x + y;};
}addX(2)(1) == 3; // true
object FunctionDemo {def main(args: Array[String]): Unit = {test05()}def test05(): Unit ={def isEq(x:String)(y:String)={x.toLowerCase == y.toLowerCase}println(isEq("A")("B"))println(isEq("A")("a"))}
}

执行结果如下:
在这里插入图片描述

结束

scala函数和方法的区别 至此结束,如有疑问,欢迎评论区留言。

http://www.lryc.cn/news/291599.html

相关文章:

  • 在WebSocket中使用Redis出现空指针异常解决方案
  • 问题:第十三届全国人民代表大会第四次会议召开的时间是()。 #经验分享#知识分享#媒体
  • 《区块链简易速速上手小册》第10章:区块链的未来与趋势(2024 最新版)
  • JVM工作原理与实战(三十一):诊断内存泄漏的原因
  • #{}和${}的区别
  • 【数据结构】(三)树Tree
  • 扩展坞 接两个显示器
  • 鸿蒙 ArkTS 从数组内查找指定的数据
  • qemu 抓取linux kernel vmcore
  • RabbitMQ 死信队列应用
  • 除毛可以用宠物空气净化器吗?猫用空气净化器哪些品牌吸毛好?
  • 有趣的css - 好看的呼吸灯效果
  • 二叉树-堆应用(1)
  • 猫头虎博主第10期赠书活动:《写给大家看的Midjourney设计书》
  • 线程池相关的类学习
  • Redis核心技术与实战【学习笔记】 - 9.如何避免单线程模型的阻塞
  • 如何在 JavaScript 中使用 map() 迭代数组
  • 学习JavaEE的日子 Day19 常用类
  • 25考研政治备考计划
  • 漏洞01-目录遍历漏洞/敏感信息泄露/URL重定向
  • 软件工程知识梳理4-详细设计
  • Spring Boot3,启动时间缩短 10 倍!
  • Picturesocial | 只要 5 分钟,发现容器编排的秘密武器!
  • GEE数据集——Umbra 卫星合成孔径雷达开放数据
  • 一个vue项目中通过iframe嵌套另外一个vue项目,如何让这两个项目进行通信
  • 上班族学习方法系列文章目录
  • 《Lua程序设计》-- 学习9
  • GIS应用水平考试一级—2009 年度第二次
  • 【计算机视觉】万字长文详解:卷积神经网络
  • Vue3项目封装一个Element-plus Pagination分页