Scala基础(8)函数定义

16 篇文章 0 订阅
  • 函数的类型

字面量包括整数字面量、浮点数字字面量、布尔型字面量、字符型字面量、字符串字面量和符号字面量、函数字面量和元组字面量。

函数字面量:我们可以像定义变量那样去定义一个函数,由此导致的结果就是函数也会和其他变量一样,开始有“值”

在函数式编程中,函数的“类型”和“值”也成为两个分开的概念,函数的“值”,就是“函数字面量”

按照大家比较熟悉的定义变量的方式,采用Scala语法来定义一个函数,声明一个变量,我们采用的形式是:

val num: Int = 5 // 当然Int类型声明也可以省略,应为Scala具有自动推断类型的功能

//按照上面的形式,来定义Scala中的函数
val counter: Int => Int = {(value) => value += 1}

在Scala中,函数已经是“头等公民”,单独剥离出来了“值”的概念,一个函数“值”就是函数字面量。这样我们只需要在某个需要声明函数的地方声明一个函数类型,在调用的时候传一个对应的函数字面量即可,和使用普通变量一模一样。

 

  • 匿名函数

我们不需要给每一个函数都进行命名,这是就可以使用匿名函数,如下:

(num: Int) => num * 2

上面的这种匿名函数的定义形式,我们经常称为“Lambda表达式”。其形式如下:

(参数) => 表达式 //如果参数只有一个,参数的圆括号可以省略
scala> val myNumFunc: Int=>Int = (num: Int) => num*2 // 把匿名函数定义为一个值,赋值给myNumFunc变量

scala> println(myNumFunc(3)) // myNumFunc函数调用的时候,需要给出参数的值,传入3得到6 

// 由于scala具有类型推断机制,可以自动推断变量类型,比如下面语句:
scala> val myNumFunc = (num: Int) => num*2
myNunFunc: Int => Int = <function>
scala> println(myNunFunc(3))

val myNunFunc: Int => Double = num => num*3
//或者
val myNunFunc = (num:Int) => num*3
// 变量类型和匿名函数类型只可以省略一个
  • 函数定义(占位符语法)

为了让函数字面量更加简洁,我们可以使用下划线作为一个或多个参数的占位符,只要每个参数在函数字面量内仅出现一次。

有时你把下划线当作参数的占位符时,编译器有可能没有足够的信息推断缺失的参数类型。例如,假设你只是写_+_

这种情况下,你可以运用冒号指定类型,如下:

scala> val f = (_:Int) + (_:Double)
scala> f(5,10)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值