文档章节

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

秋风醉了
 秋风醉了
发布于 2015/04/28 16:00
字数 373
阅读 55
收藏 0
点赞 0
评论 0

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 wildcard

println(partial.isDefinedAt(4))
println(partial(4))

运行并输出,

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

true

something else

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

© 著作权归作者所有

共有 人打赏支持
秋风醉了
粉丝 223
博文 581
码字总数 411013
作品 0
东城
程序员
Scala基础 - 函数和方法的区别

函数和方法 在Scala中函数是一等公民,你可以像操作数字一样将函数赋值给一个变量。使用val语句可以定义函数,def语句定义方法: 在Scala中无法直接操作方法,如果要操作方法,必须先将其转换...

joymufeng ⋅ 2016/04/04 ⋅ 0

Scala 函数式编程_部分应用函数_Partially Applied Functions

Scala 函数式编程部分应用函数或函数的部分应用 和其他遵循函数式编程范式的语言一样,Scala 允许部分应用一个函数。 调用一个函数时,不是把函数需要的所有参数都传递给它,而是仅仅传递一部...

秋风醉了 ⋅ 2015/04/24 ⋅ 0

Scala的函数式编程

Scala的函数式编程 昨天去一家公司面试,额,他们想招erlang的开发人员,然后我会点scala,都是函数式语言么。所以就让我过去试试了,开始介绍了一些在做的项目架构什么的。最后开始跟我聊函...

ForEleven ⋅ 2013/09/04 ⋅ 0

在下函数式编程有何贵干

函数式编程,一个一直以来都酷,很酷,非常酷的名词。虽然诞生很早也炒了很多年但是一直都没有造成很大的水花,不过近几年来随着多核,分布式,大数据的发展,函数式编程已经广泛投入到了实战...

力谱宿云 ⋅ 2016/07/07 ⋅ 8

函数和闭包之偏应用函数

偏应用函数(Partial Applied Function)的定义:偏应用函数就是缺少部分或全部参数的函数。 尽管前面的例子里下划线(_)替代的只是单个参数,但你还可以使用单个下划线替换整个参数列表。再...

柳哥 ⋅ 2014/06/08 ⋅ 0

为什么我们要学习Haskell这样的编程语言

最近的几个月,我一直在学习一种叫Haskell的编程语言。由于里面有太多的从未遇到的编程概念,整个过程就像是完全重新学习如何编程。在i.TV网站上,我写了很多JavaScript(node.js和前端代码)...

红薯 ⋅ 2012/04/11 ⋅ 12

Spark(七):局部套用和部分应用。

局部套用 和部分应用 是来源于数学的语言技术(基于 20 世纪数学家 Haskell Curry 和其他人的工作成果)。这两种技术存在于各种类型的语言中,可以单独或同时存在于函数式语言中。局部套用和...

牧羊人Berg ⋅ 2016/06/05 ⋅ 0

深入浅出 Python 函数式编程

1、函数式编程的定义与由来 如果程序中的函数仅接受输入并产生输出,即输出只依赖于输入,数据不可变,避免保存程序状态,那么就称为函数式编程(Functional Programming,简称FP,又称泛函编...

xrzs ⋅ 2015/09/09 ⋅ 0

scala中的部分应用函数和偏函数的区别

经常把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混。 本人总结如下: 部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念 偏函...

mj4738 ⋅ 2012/03/19 ⋅ 8

Scala之偏函数Partial Function

本文原文出处: http://blog.csdn.net/bluishglc/article/details/50995939 严禁任何形式的转载,否则将委托CSDN官方维护权益! 从使用case语句构造匿名函数谈起 在Scala里,我们可以使用cas...

bluishglc ⋅ 2016/03/28 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

对于程序员的招聘问题,作为软件人的一些吐槽和建议

作为软件人,找工作有时候似乎挺苦逼的。 说真的,让我去掉前面这句中“似乎”二字吧。就是苦逼!很多人都曾抱怨处在招聘的一方很糟糕——我们没有任何可靠的方式来甄别会写代码并且写得好的...

老道士 ⋅ 11分钟前 ⋅ 0

HDFS原理学习

一、概述 1、 Hadoop整合了众多的文件系统,首先提供了一个高层的文件系统抽象org.apache.hadoop.fs.FileSystem。然后有各个文件系统的实现类。 2、Hadoop是JAVA编写的,不同文件系统之间的交...

cjxcloud ⋅ 15分钟前 ⋅ 0

Linux下MySQL表名不区分大小写的设置方法(抄袭别人的)

Linux下MySQL表名不区分大小写的设置方法 MySQL表名不区分大小写的设置方法 在用centox安装mysql后,把项目的数据库移植了过去,发现一些表的数据查不到,排查了一下问题,最后发现是表名的大...

随风而浮沉 ⋅ 20分钟前 ⋅ 0

ubuntu下安装宋体simsun

sudo cp simsun.ttc /usr/share/fonts cd /usr/share/fonts sudo chmod 644 simsun.ttc 更新字体缓存: 代码: sudo mkfontscale 代码: sudo mkfontdir 代码: sudo fc-cache -fsv 安装chrome扩......

wangxuwei ⋅ 22分钟前 ⋅ 0

利用 ssh 传输文件

Linux 下一般可以用 scp 命令通过 ssh 传送文件: #把服务器上的 /home/user/a.txt 发送到本机的 /var/www/local_dir 目录下scp username@servername:/home/user/a.txt /var/www/local_dir...

大灰狼时间 ⋅ 32分钟前 ⋅ 0

web3j教程:android和java程序员如何使用web3j开发区块链以太坊

如何使用web3j为Java应用或Android App增加以太坊区块链支持,本教程内容即涉及以太坊中的核心概念,例如账户管理包括账户的创建、钱包创建、交易转账,交易与状态、智能合约开发与交互、过滤...

智能合约 ⋅ 54分钟前 ⋅ 0

web3j开发java或android以太坊智能合约快速入门

web3j简介 web3j是一个轻量级、高度模块化、响应式、类型安全的Java和Android类库提供丰富API,用于处理以太坊智能合约及与以太坊网络上的客户端(节点)进行集成。 可以通过它进行以太坊区块链...

笔阁 ⋅ 56分钟前 ⋅ 0

一起读书《深入浅出nodejs》-异步I/O

异步I/O “异步”这个名词其实很早就诞生了,但它大规模流行却是在Web 2.0浪潮中,它伴随着AJAX的第一个A(Asynchronous)席卷了Web。 为什么要异步I/O 关于异步I/O为何在Node里如此重要,这与...

小草先森 ⋅ 59分钟前 ⋅ 0

JVM各种问题

1、如果启动什么都不设,会怎样? 先来看一个命令 [root@localhost bin]# java -XX:+PrintCommandLineFlags -version -XX:InitialHeapSize=29899008 -XX:MaxHeapSize=478384128 -XX:+PrintCo......

算法之名 ⋅ 今天 ⋅ 0

SAS笔记-宏2

宏是一种文本,一般来说其编译是在程序执行之前。 宏变量的创建 %let语句 %let macro_variables = text; %let是常见的宏变量建立方式,其编译就在执行前。如下例中,想要宏变量test等于数据集...

tonorth123 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部