方法、函数、柯里化

方法

  • 声明方法:

scala> def m1(x:Int,y:Int):Int = {
    | x + y
    | }
m1: (x: Int, y: Int)Int
scala> m1(3,5)
res6: Int = 8

函数

  • 函数声明

scala> val f1 = (x: Int, y: Int) => x + y
f1: (Int, Int) => Int = <function2> //2是指参数的个数
scala> f1(3,5)
res7: Int = 8
//函数作为参数传入方法
scala> def m2(f: (Int , Int) => Int , x: Int) = f(3,4)
m2: (f: (Int, Int) => Int, x: Int)Int
scala> def m2(f: (Int , Int) => Int , x: Int) = f(3,4) + x
m2: (f: (Int, Int) => Int, x: Int)Int
scala> val f1 = (x: Int, y: Int) => x + y
f1: (Int, Int) => Int = <function2>
scala> m2(f1,2)
res8: Int = 9
//方法转换为函数

方法转换为函数

scala> def m2(f: (Int , Int) => Int , x: Int) = f(3,4)
m2: (f: (Int, Int) => Int, x: Int)Int

scala>  def m1(x:Int,y:Int):Int = x + y
m1: (x: Int, y: Int)Int

scala> val f1 = m1 _  //方法m1转换为函数
f1: (Int, Int) => Int = <function2>
scala> m2(f1,2)
res9: Int = 9
scala> m2(m1,2) //m1隐式转换为函数了
res10: Int = 9

柯里化

  • 柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术

  • 声明方法

// 声明方式1
scala> def currying(x: Int)(y:Int) = x*y
currying: (x: Int)(y: Int)Int

scala> currying(3)(4)
res0: Int = 12

scala> val curry = currying(3)_
curry: Int => Int = <function1>

scala> curry(2)
res1: Int = 6

scala> curry(9)
res2: Int = 27

// 声明方式2
scala> def curry(x: Int) = (y: Int) => x * y
curry: (x: Int)Int => Int

scala> val fun = curry(2)
fun: Int => Int = <function1>

scala> fun(2)
res10: Int = 4
  • 柯里化设置隐式的值

scala> def m2(x: Int)(implicit y: Int = 5) = x * y
m2: (x: Int)(implicit y: Int)Int

scala> m2(5)
res3: Int = 25

scala> m2(4)(4)
res4: Int = 16

scala> implicit val a = 100
a: Int = 100

scala> m2(4)
res5: Int = 400

scala> m2(4)(10)
res6: Int = 40

scala> implicit val b = 200
b: Int = 200

scala> m2(4)
<console>:11: error: ambiguous implicit values:
both value a of type => Int
and value b of type => Int
match expected type Int
             m2(4)
               ^

Scala_方法、函数、柯里化的更多相关文章

  1. 【转载】JS中bind方法与函数柯里化

    原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...

  2. 前端开发者进阶之函数柯里化Currying

    穆乙:http://www.cnblogs.com/pigtail/p/3447660.html 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接 ...

  3. [转]js函数式变成之函数柯里化

    本文转自:https://segmentfault.com/a/1190000003733107 函数柯里化是指参数逐渐求值的过程. 我觉得它是:降低通用性,提高专用性. 通常,柯里化是这样的过程,“ ...

  4. Javascript函数柯里化(curry)

    函数柯里化currying,是函数式编程非常重要的一个标志.它的实现需要满足以下条件,首先就是函数可以作为参数进行传递,然后就是函数可以作为返回值return出去.我们依靠这个特性编写很多优雅酷炫的代 ...

  5. 深入理解javascript函数进阶系列第二篇——函数柯里化

    前面的话 函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名.本文将详细 ...

  6. js高阶函数应用—函数柯里化和反柯里化(二)

    第上一篇文章中我们介绍了函数柯里化,顺带提到了偏函数,接下来我们继续话题,进入今天的主题-函数的反柯里化. 在上一篇文章中柯里化函数你可能需要去敲许多代码,理解很多代码逻辑,不过这一节我们讨论的反科里 ...

  7. Swift函数柯里化(Currying)简谈

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化.简单的说就是把接收多 ...

  8. 前端进击的巨人(五):学会函数柯里化(curry)

    柯里化(Curring, 以逻辑学家Haskell Curry命名) 写在开头 柯里化理解的基础来源于我们前几篇文章构建的知识,如果还未能掌握闭包,建议回阅前文. 代码例子会用到 apply/call ...

  9. 精读JavaScript模式(六),Memoization模式与函数柯里化的应用

    假期就这么结束了!十天假就有三天在路上,真的难受!想想假期除了看了两场电影貌似也没做什么深刻印象的事情.流浪地球,特效还是很赞,不过对于感情的描写还是逃不掉拖沓和尴尬的通病,对于国产科幻还是抱有支持的 ...

  10. JavaScript之函数柯里化

    什么是柯里化(currying)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...

随机推荐

  1. 前端面试问题html汇总

    1.对WEB标准以及W3C的理解与认识 结构层 html :表示层  css:行为层:js; 标签闭合.标签小写.不乱嵌套.提高搜索机器人搜索机率.使用外链css和js脚本.结构行为表现的分离.文件下 ...

  2. 大数乘法java版

    import java.util.*; import java.math.*; public class NumMul{ public static void main(String args[]){ ...

  3. Python如何管理内存?

    对于Python来说,内存管理涉及所有包含Python对象和堆. Python内存管理器在内部确保对堆的管理和分配. Python内存管理器具有不同的组件,可处理各种动态存储管理方面,如共享,分段,预 ...

  4. 应用内直接跳转到Appstore

    iOS开发中,应用内直接跳转到Appstore .进入appstore中指定的应用 NSString *str = [NSString stringWithFormat: @"itms:// ...

  5. Servlet会话管理二(Cookie)

    Cookie是在HTTP协议下,将服务器传递给浏览器的的少量信息保存到浏览器客户端的一种技术,通过这种技术,即使在浏览器被关闭或链接中断的情况下,用户仍可以维护Cookie中的数据. Cookie是经 ...

  6. db2建立类似oracle的dblink

    db2 catalog tcpip node rmt_node remote 127.0.0.1 server 50000; --db2 catalog database rmt_db as rmt_ ...

  7. 把dataset对象转换成list集合方法

    public static List<T> GetList<T>(DataTable table) where T:new() { List<T> list = n ...

  8. 对团队项目的NABCD的分析

    需求(N):我们的软件是面向广大想记录自己所爱动植物成长点滴的人.目前没有很好地软件,只有手机或者电脑上的笔记本和备忘录. 做法(A):我们的软件可以交流可以节约积累知识的时间,将记录从记事本中摘出来 ...

  9. 设置frameset高度

      设置frameset的高度 设置frameset高度 目前做了一个项目,界面如下: 这是使用frameset做的,在宽屏下开发一直没有发现什么问题,直到一个用户使用800*600的机子测试的时候, ...

  10. Flex的Number和Text

    今天要说的问题不是Number和String转换的问题.而是使用时容易出的一些错误: public static function ToFixed(value:Number, digits:uint ...