Currying & Partial[applied] function 初体验
来源:互联网 发布:日本黑科技 知乎 编辑:程序博客网 时间:2024/05/24 01:47
参考文献
1、王家林.scala深入浅出实战经典
2、http://www.cnblogs.com/nixil/archive/2012/05/16/2503722.html
3、http://spreadscala.iteye.com/blog/705466
场景
scala中柯里化与偏函数的基本概念与应用初体验
实验
<pre name="code" class="java"> def <pre name="code" class="java">curring(x:Int,y:Int)=x*y;package com.scode.scala/** * author: Ivy Peng * function: Curring & Partial Function & Partial applied Function 学习 * date:2016/03/22 22.34 * 1、Curring:把接收多个参数的函数变成接收单一参数的函数。 * 2、偏函数:偷懒,简化函数调用时的参数传递 * collectionA.zip(collectionB) */object Curring_Partial_Function{ def main(args: Array[String]): Unit = { /* * Currying 柯里化 */ def multiple(x:Int,y:Int)=x*y;
def curring(x:Int)= (y:Int)=> x*y; // Currydef curring2(x:Int)(y:Int)=x*y; // 简化版Curry println(curring(3)(8)) //Currying应用:_.equalsIgnoreCase(_) val a = Array("Hello","World") val b = Array("Hello","Spark") println(a.corresponds(b)(_.equalsIgnoreCase(_))) // 参见 “问题”中相关解说 /* * 偏函数 * 定义 :具有类型PartialFunction[-A,+B]的一种函数。A是其接受的函数类型,B是其返回的结果类型 * 特点:只接受和处理其参数定义域的一个子集 */ def p1:PartialFunction[Int, Int] = { case x if x > 1 => 1 } def p2 = (x:Int) => x match { case x if x > 1 => 1 } println(p2 (0))//这里会抛异常:Exception in thread "main" scala.MatchError: 0 (of class java.lang.Integer) /* * 偏应用函数: 偷懒,实现函数sum的功能-求三个数字之和,函数 parFun_2只需要传递 一个参数 */ def sum(x:Int,y:Int,z:Int)=x+y+z val parFun_1 = sum _ println(parFun_1(1,2,3)) println(parFun_1.apply(1,2,3)) val parFun_2 = sum(1,_:Int,3) println(parFun_2(2)) println(parFun_2(10)) } }
问题
林哥在解说Currying应用的时候以代码段
val a = Array("Hello","World") val b = Array("Hello","Spark") println(a.corresponds(b)(_.equalsIgnoreCase(_)))为例,通过查看 corresponds 方法的源代码:
def corresponds[B](that: GenSeq[B])(p: (A,B) => Boolean): Boolean = { val i = this.iterator val j = that.iterator while (i.hasNext && j.hasNext) if (!p(i.next(), j.next())) return false !i.hasNext && !j.hasNext }解说Currying是如何在语言级别简化scala代码的编写:a.corresponds(b)(_.equalsIgnoreCase(_)) 【这里 :_.equalsIgnoreCase(_) ,编译器利用 CurryIng 能推断出 _ 表示String类型的字符 ? Mr.Snail表示有点蒙圈啊 ,有待后续进一步分析。】
0 0
- Currying & Partial[applied] function 初体验
- currying vs partial function application
- Scala之Partially Applied Function和Currying
- Scala: 偏函数(PartialFunction) && 偏应用函数(Partial Applied Function)
- 函数柯里化function currying
- Partial-Function
- 函数Currying和Partial Application的比较
- Scala 函数柯里化(Function currying)
- python partial function
- Currying
- Whidbey 初体验之局部类型 ( partial 类型)
- 偏函数(Partial-Function)
- Applied
- 函数加里化(Currying)和偏函数应用(Partial Application)的比较
- 函数加里化(Currying)和偏函数应用(Partial Application)的比较
- 函数式编程中局部应用(Partial Application)和局部套用(Currying)的区别
- Scala新手指南中文版 -第十一篇 Currying and partially applied functions(科里化和部分应用函数)
- PostgreSQL partial/sub commit within function
- leetcode——278—— First Bad Version
- Spring中Resource对象的获取
- 深度学习与自然语言处理学习资料
- Java day08 异常处理与正常代码分离 图形面积
- java 常见异常
- Currying & Partial[applied] function 初体验
- MongoDB MapReduce
- [BZOJ2243]染色 做题笔记
- SSH 公钥免密码登陆
- 异常Exception、包package、String类、StringBuffer类
- 程序的加载和执行(二)——《x86汇编语言:从实模式到保护模式》读书笔记22
- TRUNK的作用功能.什么是TRUNK
- 希尔排序【O(n^1.3)】
- android 双击事件的实现