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)? 维基百科中的解释是:柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术.意思就是当函 ...
随机推荐
- 性能(js)
1.避免全局查找: <script type="text/javascript"> function updateUI(){ var imgs=document.get ...
- 大数java(pow)
Problems involving the computation of exact values of very large magnitude and precision are common. ...
- Android.InstallDevelopmentEvn
1. 如何搭建Android Application的开发环境 http://blog.csdn.net/yzhj2005/article/details/6980676 2. 在Mac OS X系统 ...
- 04. pt-deadlock-logger
死锁:是指两个或则多个事务在同一个资源上相互占用,并请求锁定对方占用的资源,而导致恶性循环的现象:当产生死锁的时候,MySQL会回滚一个小事务的SQL,确保另一个完成.上面是死锁的概念,而在MySQL ...
- 通过 ulimit 改善系统性能
系统性能一直是一个受关注的话题,如何通过最简单的设置来实现最有效的性能调优,如何在有限资源的条件下保证程序的运作,ulimit 是我们在处理这些问题时,经常使用的一种简单手段.ulimit 是一种 l ...
- Increase PHP script execution time with Nginx
If you have a large WordPress setup or a server with limited resources, then you will often see the ...
- python -u
标准错误(std.err):直接打印到屏幕 标准输出(std.out):需要缓存后再输出到屏幕 sys.stdout.write("stdout1") sys.stderr.wri ...
- so文件相关
2018-08-31 今天尝试了一下编译so文件. 最开始是按照这个博主来操作的https://blog.csdn.net/tianshuai4317618/article/details/79073 ...
- DOM-查找和修改
1. 查找: 按HTML查找: 问题: 每次只能按一个条件查找,如果查找条件复杂,则步骤很繁琐 解决: 选择器: 按选择器查找: 2个API 1. 只查找一个元素: var elem=parent.q ...
- Linux下安装启动多个Mysql
网上找了N多资料,没有一个可以顺利成功的,郁闷,可能是水平有限吧...!本人经过不断的研究.测试,完整实现Linux下启动两台MySQL,而且对mysql有了更深入的了解...废话不多说,走着! 步骤 ...