Scala_方法、函数、柯里化
方法、函数、柯里化
方法
声明方法:
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_方法、函数、柯里化的更多相关文章
- 【转载】JS中bind方法与函数柯里化
原生bind方法 不同于jQuery中的bind方法只是简单的绑定事件函数,原生js中bind()方法略复杂,该方法上在ES5中被引入,大概就是IE9+等现代浏览器都支持了(有关ES5各项特性的支持情 ...
- 前端开发者进阶之函数柯里化Currying
穆乙:http://www.cnblogs.com/pigtail/p/3447660.html 在计算机科学中,柯里化(英语:Currying),又译为卡瑞化或加里化,是把接受多个参数的函数变换成接 ...
- [转]js函数式变成之函数柯里化
本文转自:https://segmentfault.com/a/1190000003733107 函数柯里化是指参数逐渐求值的过程. 我觉得它是:降低通用性,提高专用性. 通常,柯里化是这样的过程,“ ...
- Javascript函数柯里化(curry)
函数柯里化currying,是函数式编程非常重要的一个标志.它的实现需要满足以下条件,首先就是函数可以作为参数进行传递,然后就是函数可以作为返回值return出去.我们依靠这个特性编写很多优雅酷炫的代 ...
- 深入理解javascript函数进阶系列第二篇——函数柯里化
前面的话 函数柯里化currying的概念最早由俄国数学家Moses Schönfinkel发明,而后由著名的数理逻辑学家Haskell Curry将其丰富和发展,currying由此得名.本文将详细 ...
- js高阶函数应用—函数柯里化和反柯里化(二)
第上一篇文章中我们介绍了函数柯里化,顺带提到了偏函数,接下来我们继续话题,进入今天的主题-函数的反柯里化. 在上一篇文章中柯里化函数你可能需要去敲许多代码,理解很多代码逻辑,不过这一节我们讨论的反科里 ...
- Swift函数柯里化(Currying)简谈
大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 下面简单说说Swift语言中的函数柯里化.简单的说就是把接收多 ...
- 前端进击的巨人(五):学会函数柯里化(curry)
柯里化(Curring, 以逻辑学家Haskell Curry命名) 写在开头 柯里化理解的基础来源于我们前几篇文章构建的知识,如果还未能掌握闭包,建议回阅前文. 代码例子会用到 apply/call ...
- 精读JavaScript模式(六),Memoization模式与函数柯里化的应用
假期就这么结束了!十天假就有三天在路上,真的难受!想想假期除了看了两场电影貌似也没做什么深刻印象的事情.流浪地球,特效还是很赞,不过对于感情的描写还是逃不掉拖沓和尴尬的通病,对于国产科幻还是抱有支持的 ...
- JavaScript之函数柯里化
什么是柯里化(currying)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...
随机推荐
- Django权限系统auth
auth模块是Django提供的标准权限管理系统,可以提供用户身份认证, 用户组和权限管理. auth可以和admin模块配合使用, 快速建立网站的管理系统. 在INSTALLED_APPS中添加'd ...
- html 转化成 pdf
- (转帖)CentOS最常用命令及快捷键整理
原文:http://www.centoscn.com/CentOS/help/2014/0306/2493.html 最近开始学Linux,在VMware Player中安装了CentOS 6.4.为 ...
- \\Device\\PhysicalMemory
从Windows Server 2003 with SP1 以后就禁用了用户态访问\\Device\\PhysicalMemory,要访读取SMBIOS的信息,请使用以下API:•EnumSystem ...
- PHP5.3的编译扩展
./configure --prefix=/usr/local/php --enable-fastcgi --enable-zip --enable-fpm --enable-gd-native-tt ...
- 【机器学习】用Octave实现一元线性回归的梯度下降算法
Step1 Plotting the Data 在处理数据之前,我们通常要了解数据,对于这次的数据集合,我们可以通过离散的点来描绘它,在一个2D的平面里把它画出来. 6.1101,17.592 5.5 ...
- day14(内置函数)
print(list(map(func, lambda x : x)) print(list(filter lambda x : x > len(x))) print(zip(l1,l2,tu) ...
- python约束 异常 MD5 日志处理
一.约束 1.用父类执行约束 子类继承父类,用重写方法,对子类的方法进行约束. class Foo: def login(self): # 对子类进行约束,该方法需要重写 # 没有执行的错误 rais ...
- python生成器初步了解
一.生成器 生成器的本质就是迭代器 一个一个的创建对象 1.创建生成器的方式: 1.生成器函数 2.通过生成器表达式来获取生成器 3.类型转换 2.优点 节省内存 ,生成器本身就是代码 ...
- 2019.01.21 bzoj1758: [Wc2010]重建计划(01分数规划+长链剖分+线段树)
传送门 长链剖分好题. 题意简述:给一棵树,问边数在[L,R][L,R][L,R]之间的路径权值和与边数之比的最大值. 思路: 用脚指头想都知道要01分数规划. 考虑怎么checkcheckcheck ...