相关推荐:scala中的部分应用函数和偏函数的区别

经常把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混。 本人总结如下: 部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念 偏函数是只对函数定义域的一个子集进行定义的函数

Scala基础 - 函数和方法的区别 - 沐风 - 开源中国社区 首页 开源项目 Java 开源软件 C# 开源软件 PHP 开源软件 C/C++ 开源软件 Ruby 开源软件 Python 开源软件 Go开源软件 JS开源软件 问答 技术问答 » 技术分享 » IT大杂烩 » 职业生涯 » 站务/建议 » 支付宝专区 » 开源硬件专区 » 代码 博客 翻译 资讯 移动开发 Android开发专区 iOS开发专区 iOS代码库 Windows Phone 招聘 城市圈 当前访客身份:游客 [ 登录 | 加入开源中国 ] 当前访客身份: 游客 [ 登录 | 加入开源中国 ] 软件 代码 讨论区 新闻 博客 软件 软件 代码 讨论区 新闻 博客 joymufeng 关注 (12) 粉丝 (49) 积分 (121) Google搜索镜像https://g.jikewenku.cn/ . 发送私信 . 请教问题 博客分类 Java (4) Scala (8) Play 2.x (12) 网络技术 (3) 日常记录 (0) 阅读排行 1. 你真的了解Java中的负数? 2. PlayFramework 2.1 技巧-性能调优实战 3. Play Framework2.1源码分析 - 架构设计及线程策略分析 4. Play 2.1 - Evolution插件使用指南 5. PlayFramework 2.x 技巧-远程调试 6. Play Framework2.1源码分析 - 请求处理流程 7. PlayFramework 2.x 技巧-@ManyToMany关联 8. Play开发环境配置(play+idea+svn) 最新评论 @joymufeng :Sorry, Play-Java好久不用了,一直在用Play-Scal... 查看» @jinpeng0513 :引用来自“joymufeng”的评论试试增加db.defaul... 查看» @joymufeng :试试增加db.default.partitionCount和db.defaul... 查看» @jinpeng0513 :您好,我们公司也用play java ,我想问下,你们的... 查看» @joymufeng :引用来自“翟志军”的评论请问,如何单独执行evl... 查看» @翟志军 :请问,如何单独执行evlutions的命令,而不是pla... 查看» @joymufeng :引用来自“Sorry'”的评论您好,很幸运很高兴很激... 查看» @Sorry' :您好,很幸运很高兴很激动可以看见您的关于Play2... 查看» @Sorry' :您好,很幸运很高兴很激动可以看见您的关于Play2... 查看» @joymufeng :引用来自“西夏一品堂”的评论你好,请问playfra... 查看» 访客统计 今日访问: 17 昨日访问: 28 本周访问: 134 本月访问: 144 所有访问: 18829 空间 » 博客 » Scala Java Play 2.x 网络技术 日常记录 所有分类 原 顶 Scala基础 - 函数和方法的区别 发表于1个月前(2016-04-04 15:52)

阅读( 31 ) | 评论( 0 ) 0 人收藏此文章, 赞 0 上海源创会5月15日与你相约【玫瑰里】,赶快来约哦~!>>>

摘要 介绍Scala中函数和方法的区别,以及如何将Currying函数和Currying方法转换成偏函数。 scala 函数 currying 柯里化 目录[-] 1. 函数和方法 2. 两者的区别 3. Currying函数和Currying方法 4. 参考文档: ### 1. 函数和方法 在Scala中函数是一等公民,你可以像操作数字一样将函数赋值给一个变量。使用val语句可以定义函数,def语句定义方法: ``` class Test{ def m(x: Int) = x + 3 val f = (x: Int) => x + 3 } ``` 在Scala中无法直接操作方法,如果要操作方法,必须先将其转换成函数。有两种方法可以将方法转换成函数: ``` val f1 = m _ ``` 在方法名称m后面紧跟一个空格和下划线告诉编译器将方法m转换成函数,而不是要调用这个方法。 也可以显示地告诉编译器需要将方法转换成函数: ``` val f1: (Int) => Int = m ``` 通常情况下编译器会自动将方法转换成函数,例如在一个应该传入函数参数的地方传入了一个方法,编译器会自动将传入的方法转换成函数。 ### 2. 两者的区别 可以直接调用函数上的方法,而方法却不行,例如: ``` f.toString //编译通过 m.toString //编译失败 ``` ### 3. Currying函数和Currying方法 Currying函数可以只传入部分参数返回一个偏函数(partially applied function, 也叫部分应用函数),而Currying方法在转换成偏函数时需要加上显式说明,让编译器完成转换: ``` object TestCurrying { def invoke(f: Int => Int => Int): Int = { f(1)(2) } def multiply(x: Int)(y: Int): Int = x * y def main(args: Array[String]) { invoke(multiply)//编译器会自动将multiply方法转换成函数 val partial1 = multiply(1) //尝试将Currying方法转换成偏函数导致编译失败 val partial2 = multiply(1): (Int => Int) //编译通过 val f = multiply _ //将multiply方法转换成函数f val partial3 = f(1) //只应用第1个参数返回偏函数,编译通过 } } ``` ### 4. 参考文档: 1. [Scala Functions vs Methods](http://jim-mcbeath.blogspot.com/2009/05/scala-functions-vs-methods.html) 2. [Why does it compile successfully while pass only one parameter to currying function?](http://stackoverflow.com/questions/36395247/why-does-it-compile-successfully-while-pass-only-one-parameter-to-currying-funct) 分享到: 0 赞 声明:OSCHINA 博客文章版权属于作者,受法律保护。未经作者同意不得转载。 « 上一篇 下一篇 » 最新热门职位 更多开发者职位上 开源中国·招聘 M 高级运维工程师 MyChoice 月薪: 25-35K 职 大数据高级工程师 职信力 月薪: 25-40K Java架构师 联有企业 月薪: 25-40K java开发工程师 海云数据 月薪: 4-8K 评论 楼: ( ) 手机 Android iPhone Windows Phone 微信 发表于 删除 回复此评论 < 1 > 插入: 表情 开源软件 发表评论 插入: 表情 开源软件 关闭 插入表情 关闭 相关文章阅读 2016/04/04 Scala基础 - 柯里化(Currying)及其应... 2013/09/04 Scala的函数式编程 2015/11/20 scala_2:函数(Function)... 2015/02/27 Scala的那些匿名函数 2015/06/30 Scala 高阶函数(high-order functio... © 开源中国(OSChina.NET) | 关于我们 | 广告联系 | @新浪微博 | 开源中国手机版 | 粤ICP备12009483号-3 开源中国手机客户端: Android iPhone WP7 开源中国社区(OSChina.net)是工信部 开源软件推进联盟 指定的官方社区

相关推荐:scala中的部分应用函数和偏函数的区别

经常把部分应用函数(Partial Applied Function)和偏函数(Partial Function) 搞混。 本人总结如下: 部分应用函数(Partial Applied Function)是缺少部分参数的函数,是一个逻辑上概念 偏函数是只对函数定义域的一个子集进行定义的函数

快照源:http://my.oschina.net/joymufeng/blog/652310