博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala 函数式编程_偏函数_Partial Functions
阅读量:7240 次
发布时间:2019-06-29

本文共 1614 字,大约阅读时间需要 5 分钟。

hot3.png

Scala 函数式编程_偏函数_Partial Functions

偏函数_Partial Functions

偏函数是只对函数定义域的一个子集进行定义的函数。 scala中用scala.PartialFunction[-T, +S] 类来表示。

比如,对给定的输入参数类型,偏函数只能接受该类型的某些特定的值。一个定义为(Int) => String 的偏函数可能不能接受所有Int值为输入。

如下定义一个偏函数,这个函数只会接收 1 和 2 ,这两个输入。其他输入会报错。

val one: PartialFunction[Int, String] = {  case 1 => "one"  case 2 => "two"}println(one.isDefinedAt(1))println(one.isDefinedAt(2))println(one(1))println(one(2))

运行并输出,

true

true

one

two

isDefinedAt表示 这个参数是否在函数的定义域中,否则抛出异常。

如下,

...........

...........

false

scala.MatchError: 3 (of class java.lang.Integer)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:251)

再来看一个例子,

val signal: PartialFunction[Int, Int] = {  case x if x > 1 => 1  case x if x < -1 => -1}println(signal(1212))println(signal(-74567))println(signal(0))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala

1

-1

scala.MatchError: 0 (of class java.lang.Integer)

        at scala.PartialFunction$$anon$1.apply(PartialFunction.scala:253)

使用 orElse 组合函数

使用 orElse 组合函数

val one: PartialFunction[Int, String] = {  case 1 => "one"}val two: PartialFunction[Int, String] = {  case 2 => "two"}val three: PartialFunction[Int, String] = {  case 3 => "three"}val wildcard: PartialFunction[Int, String] = {  case _ => "something else"}val partial = one orElse two orElse three orElse wildcardprintln(partial.isDefinedAt(4))println(partial(4))

运行并输出,

C:\WorkSpace6-scala\scala-train\src\com\usoft>scala PartialFunction.scala

true

something else

=============END=============

转载于:https://my.oschina.net/xinxingegeya/blog/407276

你可能感兴趣的文章
说说Spring中的WebDataBinder
查看>>
每日一句(2014-9-29)
查看>>
标头“Vary:Accept-Encoding”指定方法及其重要性分析
查看>>
史上最简单的Hibernate入门简单介绍
查看>>
C语言
查看>>
在Xcode中使用Git进行源码版本控制
查看>>
ASP.NET将word文档转换成pdf的代码
查看>>
(原创)大数据时代:基于微软案例数据库数据挖掘知识点总结(Microsoft 神经网络分析算法原理篇)...
查看>>
head命令
查看>>
java基础复习二——面向对象一
查看>>
shell语法简单介绍
查看>>
护眼色的RGB值
查看>>
无法识别的属性“targetFramework”。请注意属性名称区分大写和小写。错误解决的方法...
查看>>
EJB究竟是什么,真的那么神奇吗??
查看>>
Android入门第八篇之GridView(九宫图)
查看>>
浅谈MySQL外键
查看>>
java中instanceof用法
查看>>
OC学习总结之面向对象和类
查看>>
atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
查看>>
《SQL Server企业级平台管理实践》读书笔记——SQL Server中关于系统库Tempdb总结...
查看>>