没有合适的资源?快使用搜索试试~ 我知道了~
KinoMin#bigdata-learning-notes#scala部分应用函数与偏函数1
需积分: 0 0 下载量 165 浏览量
2022-07-25
14:35:09
上传
评论
收藏 6KB MD 举报
温馨提示
试读
一、部分应用函数 二、偏函数 一、部分应用函数 二、偏函数
资源推荐
资源详情
资源评论
* [一、部分应用函数](#%E4%B8%80%E9%83%A8%E5%88%86%E5%BA%94%E7%94%A8%E5%87%BD%E6%95%B0)
* [二、偏函数](#%E4%BA%8C%E5%81%8F%E5%87%BD%E6%95%B0)
---
# 一、部分应用函数
**部分应用函数:** 是指一个函数有N个参数, 而我们为其提供少于N个参数, 那就得到了一个部分应用函数.
```scala
def sum(a:Int,b:Int,c:Int) = a + b + c;
```
那么就可以从这个函数衍生出一个偏函数是这样的:
```scala
def p_sum = sum(1, _:Int, _:Int)
```
于是就可以这样调用p_sum(2,3), 相当于调用sum(1,2,3) 得到的结果是6. 这里的两个_分别对应函数sum对应位置的参数. 所以你也可以定义成
```scala
def p_sum = sum (_:Int, 1, _:Int)
```
----
# 二、偏函数
**偏函数定义:** 用一对大括号括起来的一系列的 case 语句
偏函数的引出,先看一段需求案例: **`将 List(1, 2, 3, "abc", false) 的非数字 忽略, 将数字 + 1 并返回`**
```python
def main(args: Array[String]): Unit = {
// 解决方式一: filter + map, 可以解决问题, 但是麻烦
val list = List(1, 2, 3, "abc", false)
//选过滤, 在 map
val list1 = list.filter(x => x.isInstanceOf[Int]) //先过滤 Int 类型的参数
.map(x => x.asInstanceOf[Int]) // 将过滤过来的值, 转成 Int 类型
.map(x => x + 1) // 将 转换好的值 + 1
println(s"filter + map 的方式: ${list1.mkString(", ")}")
//解决方式二: 模式匹配, 比上面的方法简单, 但是不够完美
val list2: List[Int] = list.filter(x => x.isInstanceOf[Int]).map(x => {
x match {
case x: Int => x + 1
}
})
println(s"模式匹配的方式: ${list2.mkString(", ")}")
}
```
运行结果:
```python
filter + map 的方式: 2, 3, 4
模式匹配的方式: 2, 3, 4
```
上面的两种解决方式比较麻烦,我们**使用�
点击阅读更多
资源评论
赵小杏儿
- 粉丝: 19
- 资源: 314
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功