1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 大数据常用语言Scala(十三):基础语法学习 函数 重点掌握

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

时间:2024-07-20 23:52:46

相关推荐

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

目录

函数重点掌握

定义函数

方法和函数的区别

方法转换为函数

完全体函数

函数重点掌握

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

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

定义函数

简便语法

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

[!TIP]

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

示例

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

调用该函数

参考代码

scala>valadd =(x:Int,y:Int)=>x +yadd:(Int,Int)=>Int=<function2>scala>add(1,2)res3:Int=3

方法和函数的区别

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

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

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

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

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

示例

方法无法赋值给变量

scala>defadd(x:Int,y:Int)=x+yadd:(x:Int,y:Int)Intscala>vala =add<console>:12:error:missing argument list formethod addUnapplied methods are only converted to functions when a function typeis expected.You can make thisconversion explicit by writing `add _` or `add(_,_)` instead of `add`.vala =add

方法转换为函数

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

示例

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

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

参考代码

scala>defadd(x:Int,y:Int)=x+yadd:(x:Int,y:Int)Intscala>vala =add _a:(Int,Int)=>Int=<function2>

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

完全体函数

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

valfunc:(Int,Int)=>Int=(x,y)=>x +y

其中

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

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

容易混淆的错误写法

scala>valaddFunc:Int=(x:Int,y:Int)=>x +y<console>:11:error:typemismatch;found :(Int,Int)=>Intrequired:IntvaladdFunc:Int=(x:Int,y:Int)=>x +y

对函数addFunc的类型定义错误

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。