CC00053.scala——|Hadoop&Scala.V01|——|Scala.v01|模式匹配和样例类|函数字面量|函数定义|

一、函数字面量及函数的定义
### --- 函数字面量及函数的定义

~~~     Scala中函数为头等公民,不仅可以定义一个函数然后调用它,
~~~     还可以写一个未命名的函数字面量,然后可以把它当成一个值传递到其它函数或是赋值给其它变量。
~~~     函数字面量体现了函数式编程的核心理念。
~~~     字面量包括整数字面量、浮点数字面量、布尔型字面量、字符字面量、字符串字面量、
~~~     符号字面量、函数字面量等。什么是函数字面量呢?
~~~     在函数式编程中,函数是“头等公民”,可以像任何其他数据类型一样被传递和操作。
~~~     函数的使用方式和其他数据类型的使用方式完全一致,
~~~     可以像定义变量那样去定义一个函数,函数也会和其他变量一样,有类型有值;
~~~     就像变量的“类型”和“值”是分开的两个概念一样,
~~~     函数的“类型”和“值”也成为两个分开的概念;函数的“值”,就是“函数字面量”。
### --- 编程示例

scala> def add1(x: Int): Int = { x + 1 }
add1: (x: Int)Int
// 函数的类型为: (Int) => Int
// 输入参数列表只有一个括号,可以简写为: Int => Int

scala> def add2(x: Int, y: Int): Int = { x + y }
add2: (x: Int, y: Int)Int
// 函数的类型为: (Int, Int) => Int

scala> def add3(x: Int, y: Int, z: Int): Int = { x + y + z }
add3: (x: Int, y: Int, z: Int)Int
// 函数的类型为: (Int, Int, Int) => Int

scala>  def add4(x: Int, y: Int, z: Int): (Int, Int) = { (x + y, y + z) }
add4: (x: Int, y: Int, z: Int)(Int, Int)
// 函数的类型为: (Int, Int, Int) => (Int, Int)
### --- 函数类型

~~~     函数类型:(输入参数类型列表) => (输出参数类型列表)
~~~     只有一个参数时,小括号可省略;函数体中只有1行语句时,大括号可以省略;
~~~     把函数定义中的类型声明部分去除,剩下的就是函数的“值”,# 即函数字面量:
~~~     对 add1 而言函数的值为:(x) => x+1
~~~     对 add2 而言函数的值为:(x, y) => x+y
~~~     对 add3 而言函数的值为:(x, y, z) => x+y+z
~~~     对 add4 而言函数的值为:(x, y, z) => (x+y, y+z)
~~~     在Scala中我们这样定义变量: val 变量名: 类型 = 值;
### --- 我们可以用完全相同的方式定义函数: val 函数名: 函数类型 = 函数字面量
~~~     在Scala中有自动类型推断,所以可以省略变量的类型 val 变量名 = 值。

val add1: Int => Int = (x) => x+1
val add2: (Int, Int) => Int = (x, y) => x + y
val add3: (Int, Int, Int) => Int = (x, y, z) => x + y + z
val add4: (Int, Int, Int) => (Int, Int) = (x, y, z) => (x + y, y + z)
### --- 同样函数也可以这样: val 函数名 = 函数字面量
~~~     要让编译器进行自动类型推断,要告诉编译器足够的信息,所以添加了 x 的类型信息。

val add1 = (x: Int) => x + 1
val add2 = (x: Int, y: Int) => x + y
val add3 = (x: Int, y: Int, z: Int) => x + y + z
val add4 = (x: Int, y: Int, z: Int) => (x + y, y + z)
### --- 函数的定义:

~~~     val 函数名: (参数类型1,参数类型2) => (返回类型) = 函数字面量 val 函数名 = 函数字面量  
~~~     函数字面量:(参数1:类型1,参数2:类型2) => 函数体 val 函数名 = (参数1:类型1,参数2:类型2) => 函数体
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yanqi_vip

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值