偏函数的简写形式 | 学习笔记

简介: 快速学习偏函数的简写形式

开发者学堂课程【Scala 核心编程 - 进阶偏函数的简写形式学习笔记,与课程紧密连接,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/610/detail/9088


偏函数的简写形式


偏函数简化形式

声明偏函数,需要重新写特质中的方法,有的时候会略显麻烦,而 Scala 其实提供了简单的方法

1、简化形式1代码说明

//只需要声明传入参数的类型和返回参数的类型,直接写 case

def f2:PartialFunction[Any,Int]={

// case 怎样写取决于原先的代码逻辑,匹配上写 i+1,匹配不上不写任何代码,不会异常,在底层做优化

case i:Int=>i+1//case语句可以自动转换为偏函数

}

val list2 = List(1,2,3,4,"ABC").collect(f2)

// isDefinedAt 、 isInstanceOf 和 apply 业务量逻辑可以精简成一句话 case i:Int=>i+1,i 可以随便写如a、b

新建文件 PartialFun03 :

package com.atguigu.chapter13

object PartialFun03{

def main(args: Array[String]): Unit ={

//可以将前面的案例的偏函数简写

def partialFun2 :  PartialFunction[Any,Int]={

//简写成 case 语句

case i:Int =>i + 1

}

val list = List(1,2,3,4,”hello”)

val list2 = list.collect(partialFun2)

println(“list2=” + list2)

}

}

执行:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5)

Process finished with exit code 0

小数形式:

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2:PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

//只有 j * 2 不能转成 Int ,可以写 implicit 来转

case j:Double => (j * 2).toInt

}

val list = List(1, 2, 3, 4, 1.2, 2.4, "hello")

val list2=list.collect(partialFun2)

println("list2="+ list2)

}

}

效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

Process finished with exit code 0

//可以对不同的类型甚至更多的判断进行处理

2、简化形式2代码说明

val list3 = List(1,2,3,4,"ABC").collect{case i:Int=>i+1}

println(list3)

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2: PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

case j:Double => (j * 2).toInt

}val list = List(1, 2, 3, 4, 1.2, 2.4, "hello") val list2=list.collect(partialFun2) println("list2="+ list2)

//第二种简写形式

val list3 = list.collect{

case i:Int => i+1

case j:Double => (j*2).toInt

}

println(“list3=”+list3)//(2,3,4,5)

}

}

运行效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

list3=List(2,3,4,5)

Process finished with exit code 0

加入 1.9f:

package com.atguigu.chapter13

object PartialFun03 {

def main(args:Array[String]):Unit={

//可以将前面的案例的俯函数简写

def partialFun2: PartialFunction[Any,Int]={

//简写成case 语句

case i:Int => i + 1

case j:Double => (j * 2).toInt

}val list= List(1,2,3, 4, 1.2, 2.4, 1.9f,"hello") val list2=list.collect(partialFun2) println("list2="+ list2)

//第二种简写形式

val list3 = list.collect{

//偏函数的处理

case i:Int => i+1

case j:Double => (j*2).toInt

//最好换一个名字

case k:Float => (k*3).toInt

}

println(“list3=”+list3)//(2,3,4,5)

}

}

运行效果:

D:\program\jdk8\bin\java ...

list2=List(2,3,4,5,2,4)

list3=List(2,3,4,5,2,4,5)

Process finished with exit code 0

相关文章
|
6天前
|
存储 JSON 前端开发
JSON数组的概念、语法和用法
JSON数组的概念、语法和用法
225 3
|
6天前
|
存储 Python 容器
python函数的返回值、嵌套方式以及函数中的变量(一)
python函数的返回值、嵌套方式以及函数中的变量(一)
202 2
|
6天前
|
算法 Python
函数的概念和函数表达式的几种形式是什么?
函数的概念和函数表达式的几种形式是什么?
|
6天前
|
C++
C++ 默认参数与引用传递:语法、用法及示例
C++ 允许函数参数具有默认值,简化调用。例如,`void myFunction(string country = "Norway")` 中`country`默认为"Norway"。默认参数仅适用于函数参数,不包括返回值。引用传递是另一种传递方式,函数直接访问变量内存,允许修改原值,提高效率。`void swapNums(int &x, int &y)` 中`x`和`y`为引用参数。了解这些特性可提升代码可读性和性能。
45 0
|
9月前
|
前端开发 JavaScript API
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(五)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(五)
|
7月前
|
Swift
swift 闭包简写实际参数名$0、$1等理解
swift 闭包简写实际参数名$0、$1等理解
32 0
|
7月前
|
Python
输入函数以及eval函数的用法,获取变量的数据类型
输入函数以及eval函数的用法,获取变量的数据类型
|
9月前
|
前端开发 API 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(六)
|
9月前
|
前端开发 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(二)
|
9月前
|
前端开发 网络架构
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(四)
ES6-ES11-第一部分-let、const、解构赋值、模板字符串、简化对象写法、箭头函数、函数参数默认值、rest 参数、扩展运算符、Symbol、迭代器、生成器、Promise、Set、Map(四)