2021年大数据常用语言Scala(十三):基础语法学习 函数 重点掌握

举报
Lansonli 发表于 2021/09/29 00:52:47 2021/09/29
【摘要】 目录 函数 重点掌握 定义函数 方法和函数的区别 方法转换为函数 完全体函数 函数 重点掌握 scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数 函数和我们的对象一样, 在Scala中都是属于一等公民   定义函数 简便语法 val 函数变量...

目录

函数 重点掌握

定义函数

方法和函数的区别

方法转换为函数

完全体函数


函数 重点掌握

scala支持函数式编程,将来编写Spark/Flink程序中,会大量使用到函数

函数和我们的对象一样, 在Scala中都是属于一等公民

 

定义函数

简便语法

val 函数变量名 = (参数名:参数类型, 参数名:参数类型....) => 函数体

[!TIP]

  • 函数是一个对象(变量)
  • 类似于方法,函数也有输入参数和返回值
  • 函数定义不需要使用def定义
  • 无需指定返回值类型

 

示例

定义一个两个数值相加的函数

调用该函数

 

参考代码


  
  1. scala> val add = (x:Int, y:Int) => x + y
  2. add: (IntInt) => Int = <function2>
  3. scala> add(1,2)
  4. res3: Int = 3

 

方法和函数的区别

  • 方法是隶属于类或者对象的,在运行时,它是加载到JVM的方法区中. 但是函数本身就是一个对象
  • 可以将函数对象赋值给一个变量,在运行时,它是加载到JVM的堆内存中
  • 函数是一个对象,继承自FunctionN,函数对象有apply,curried,toString,tupled这些方法。方法则没有

通俗来说, 从定义的方式就可以看出方法和函数的区别.

一般我们使用def定义的为方法.

而通过val 或者var 定义一个对象来接收的, 一般就是函数

因为方法无法赋值给对象, 但是函数定义的时候, 就是直接赋值给了对象的

示例

方法无法赋值给变量


  
  1. scala> def add(x:Int,y:Int)=x+y
  2. add: (x: Int, y: Int)Int
  3. scala> val a = add
  4. <console>:12: error: missing argument list for method add
  5. Unapplied methods are only converted to functions when a function type is expected.
  6. You can make this conversion explicit by writing `add _` or `add(_,_)` instead of `add`.
  7.        val a = add

 

方法转换为函数

  • 有时候需要将方法转换为函数,作为变量传递,就需要将方法转换为函数
  • 使用_即可将方法转换为函数

 

示例

定义一个方法用来进行两个数相加

将该方法转换为一个函数,赋值给变量

 

参考代码


  
  1. scala> def add(x:Int,y:Int)=x+y
  2. add: (x: Int, y: Int)Int
  3. scala> val a = add _
  4. a: (IntInt) => Int = <function2>

大家不用过多去思考为何加了一个 _ 就能转换成函数, 这里没有什么特殊的意思, 就是语法要求而已.

 

完全体函数

前面写的函数 实际上是一种省略了返回值的写法, 完全体如下

val func: (Int, Int) => Int = (x, y) => x + y

其中

  • 前面的(Int, Int) => Int 是对象func(也就是这个函数)的类型, 类型是一个函数, 函数的内容格式是 两个int参数输入, 返回一个int输出
  • 后面的(x, y) = > x + y 就是定义形参, 给形参命名, 同时写上函数体

一般我们不写完全体, 简略体就够了

 

容易混淆的错误写法


  
  1. scala> val addFunc: Int = (x:Int, y:Int) => x + y
  2. <console>:11error: type mismatch;
  3.  found   : (IntInt) => Int
  4.  required: Int
  5.        val addFunc: Int = (x:Int, y:Int) => x + y

对函数addFunc的类型定义错误

addFunc是一个函数, 函数的类型必须是能看出 什么输入 + 得到什么输出

也就是这里addFunc的类型应该是 (Int, Int) => Int 也就是, 两个Int输入参数, 得到一个Int输出返回.

文章来源: lansonli.blog.csdn.net,作者:Lansonli,版权归原作者所有,如需转载,请联系作者。

原文链接:lansonli.blog.csdn.net/article/details/116430962

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。