首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Scala之偏函数Partial Function

一个case语句就是一个独立的匿名函数,如果有一case语句的话,从效果上看,构建出的这个匿名函数会有多种不同的参数列表,每一个case对应一种参数列表,参数是case后面的变量声明,其值是通过模式匹配赋予的...实际上case语句组合函数的用意是高度贴合的,所以使用case语句组合是最简单明智的选择,同样是上面的inc函数,换成case去写如下: scala> def inc: PartialFunction...从另一个角度思考,偏函数的逻辑是可以通过普通函数去实现的,只是偏函数是更为优雅的一种方式,同时偏函数特质PartialFunction的存在对调用方和实现方都是一种语义更加丰富的约定,比如collect...方法声明使用一个偏函数就暗含着它不太可能对每一个元素进行操作,它的返回结果仅仅是针对偏函数“感兴趣”的元素计算出来的 为什么偏函数只能有一个参数?...说到底,类型PartialFunction无非是为由一case语句描述的函数字面量提供一个类型描述而已,case语句只接受一个参数,则偏函数的类型声明自然就只有一个参数。

95890
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    泛函编程(35)-泛函Stream IO:IO处理过程-IO Process

    我们可以把Stream IO处理过程想象成连成一串的电视信号处理盒子:每个盒子具备一项信号转换或者过滤功能,我们将一个盒子的输出端子接入另一个盒子的输入端子使信号可以经过一连串的处理过程最终输出我们要求的信号...另外,可以把两个Process的处理过程连接起来:一个Process处理完后接着处理另一个Process: 1 def ++(p2: Process[I,O]): Process[I,O] = //...iproc是个函数,而partialfunction是function的子类,因而可以这样写 7 case None => iproc(None) //没有输入元素,继续等...} 下面是一Process的基本方法和组件: 1 object Process { 2 case class Halt[I,O]() extends Process[I,O] 3 case...iproc是个函数,而partialfunction是function的子类,因而可以这样写 58 case None => iproc(None) //没有输入元素,

    1K100

    Scala 高阶(九):Scala中的模式匹配

    alice, 20",会默认调用 unapply 方法(对象提取器),student 作为 unapply 方法的参数,unapply 方法将 student 对象的 name 和 age 属性提取出来,...Student("alice", 15)) 中的属性值进行匹配 case 中对象的 unapply 方法(提取器)返回 Some,且所有属性均一致,才算匹配成功, 属性不一致,或返回 None,则匹配失败...偏函数也是函数的一种,通过偏函数我们可以方便的对输入参数做更精确的检查。...偏函数定义 val second: PartialFunction[List[Int], Option[Int]] = { case x :: y :: _ => Some(y) } second:偏函数名称...PartialFunction[List[Int], Option[Int]]: 偏函数类型 该偏函数的功能是返回输入的 List 集合的第二个元素 举个例子: object Test_PartialFunction

    1.5K30

    Scala中的方法函数

    柯里化函数 高阶函数 二者的联系区别 方法主要用于类和对象,函数主要用于传参和返回函数是一个对象,可以赋值给一个变量 二者可以部分转化 01 方法的常用用法 在多数编程语言中,方法其实属于广义上的函数...,该方法的返回值均为空 方法体中的大括号:在Scala中,大括号意味着将一执行语句囊括为一个整体,并称之为代码块,代码块的最后一行代码的执行结果即是该方法的返回结果 方法体中return:Python...在如上的函数声明中,仍然实现的是两个整数相加的功能,其中各要素介绍如下: 函数参数即参数类型,用法方法中类似 建立参数返回值映射,个人认为这是Scala中函数的一个标志性符号,作用类似于方法中的=...| } val fun: PartialFunction[Int,Double] = PartialFunction[Int, Double]中,第一个Int表示输入参数为Int...实际上,将函数作为另一个函数的参数或者返回值,这一特性在Python中也是有所体现的。 03 二者的联系区别 作为编程语言中常用的封装技巧,函数是必不可少的语法特性。

    1K10

    spark RPC原理

    Netty上加了一层封装,为实现对Spark的定制开发,所以了解Spark中RPC的原理还是有必要的 Akka是一个异步的消息框架,所谓的异步,简言之就是消息发送方发送出消息,不用阻塞等待结果,接收方处理完返回结果即可...当我们调用RpcEnv中的setupEndpoint来注册一个endpoint到rpcEnv的时候,在NettyRpcEnv内部,会将该endpoint的名称与其本省的映射关系,rpcEndpointrpcEndpointRef...rpcEnv.endpointRef(this) } //处理来自RpcEndpointRef.send或者RpcCallContext.reply的消息 def receive: PartialFunction...RequestExecutors(appId, requestedTotal) => case KillExecutors(appId, executorIds) => } 定义了对需要回复的消息的处理逻辑...conf: SparkConf, val securityMgr: SecurityManager) extends ThreadSafeRpcEndpoint with Logging { Master

    97820

    Scala系列 (二)Scala数组----超详细常用方法及其用法

    如果你也对 大数据机器学习感兴趣,可以关注我的动态 https://blog.csdn.net/qq_35050438,让我们一起挖掘数据与人工智能的价值~  Scala函数之数组:  Array方法...:  ++  合并数组  var c = Array(1,2,3) var b = Array(4,5,6) b++c ++:  合并数组 并将右边的类型作为最终结果返回   val a = List(...(1, 2, 3) println(a.count({x:Int => x > 2}))  // count = 1 diff(that: collection.Seq[T]): Array[T]  返回当前数组另一个数组比较后独一无二得元素...Map类型,每个key对应一个序列,下面代码实现的是,把小于3的数字放到一,大于3的放到一返回Map[String,Array[Int]]      val a = Array(1, 2, 3,4..."+x.mkString(","))) /** 第1:1,2,3 第2:4,5 */ hasDefiniteSize: Boolean  检测序列是否存在有限的长度,对应Stream这样的流数据,返回

    1.7K00

    大数据利器--Scala语言学习(高级)

    Set[A] 合并两个集合 7 def drop(n: Int): Set[A]] 返回丢弃前n个元素新集合 8 def dropRight(n: Int): Set[A] 返回丢弃最后n个元素新集合...三、函数式编程 1、偏函数 在对符合某个条件,而不是所有情况 进行逻辑操作时,使用偏函数是一个不错的选择将包在大括号内的一 case 语句封装为函数,我们称之为偏函数,它只对会作用于指定类型的参数或指定范围值的参数实施计算...偏函数在 Scala 中是一个特质 PartialFunction 1) 使用构建特质的实现类(使用的方式是 PartialFunction 的匿名子类) 2) PartialFunction...(function1) println(list2) } } 偏函数简化 scala // 方式1 def f2: PartialFunction[Any, Int] = { case...高阶函数可以返回一个匿名函数

    1.9K10

    在下函数式编程,有何贵干?

    这样的好处是可以使用很多 FP 语言都支持的尾递归优化或者叫尾递归消除,即递归调用时直接将函数的调用者传入到下一个递归函数中,并将当前函数弹出栈中,在最后一次递归调用完毕后直接返回传入的调用者处而不是返回上一次递归的调用处...高阶函数 High-Order Function 高阶函数指一个函数的参数是另一个函数,或者一个函数返回值是另一个函数。...transformation 即转换操作,所有返回 Stream 对象的函数都是 transformation 操作,该操作不会立即执行,而是将执行步骤保存在 Stream 对象中。...定义一个偏函数 val isEven: PartialFunction[Int, String] = { case x if x !...val isOdd: PartialFunction[Int, String] = { case x if x % 2 !

    74670
    领券