Scala函数定义与使用

Scala函数定义与使用

定义函数最通用的方法是作为某个或者单例对象的成员,这种函数被称为方法

基本定义语法:

def 方法名 (参数列表) : 结果类型 = {方法体}
def max(x: Int, y: Int): Int = {
  if (x > y) x
  else y
}

函数概念:

def counter(value: Int): Int = {value += 1}

函数类型:(Int) => Int

函数的输入参数的类型以及返回值的类型一起构成函数类型。

  • 当参数只有一个时,圆括号可以省略
  • 只有存在多个参数时(不同参数之间用逗号隔开),圆括号才是必须的

函数值:(value) => {value += 1}

定义函数:

val counter:Int => Int = {(value) => value += 1}

函数字面量

匿名函数,Lambda表达式,不需要给每个函数命名。

(num:Int) => num * 2

Lambda表达式格式:

(参数)=>表达式
//如果参数只有一个,参数的圆括号可以省略

案例:

scala> val myNumFunc:Int=>Int = (num:Int)=>num * 2
myNumFunc: Int => Int = $Lambda$1041/1258503852@51a16adf

scala> println(myNumFunc(3))
6

匿名函数→赋值→函数类型的变量

当Scala可以自动推断变量类型时,不用声明类型。

scala> val myNumFunc = (num:Int)=>num * 2
myNumFunc: Int => Int = $Lambda$1057/227972178@4d4df0f4

scala> println(myNumFunc(3))
6

若继续省略num的类型声明

scala> val myNumFunc = (num)=>num * 2
<console>:11: error: missing parameter type
       val myNumFunc = (num)=>num * 2
                        ^

若给出类型说明

scala> val myNumFunc:Int=>Int = (num)=>num * 2
myNumFunc: Int => Int = $Lambda$1067/1482010861@92fd091

scala> println(myNumFunc(3))
6

下划线“_”的作用:
表示每个参数在函数字面量里面仅出现一次。

scala> val counter = (_:Int)+1//有类型时括号不能省略,等效于“x:Int=>x+1”
counter: Int => Int = $Lambda$1068/519063059@2d3d4a54

scala> val add = (_:Int)+(_:Int)//等效于“(a:Int,b:Int)=>a+b”
add: (Int, Int) => Int = $Lambda$1070/1221878991@1e14b269

scala> val m1=List(1,2,3)
m1: List[Int] = List(1, 2, 3)

scala> val m2=m1.map(_*2)//map接受一个函数作为参数,相当于“m1.map(x=>x*2)”,参数的类型可以根据m1的元素类型推断出,所以可以省略。
m2: List[Int] = List(2, 4, 6)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值