博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记29 - 偏应用函数
阅读量:7035 次
发布时间:2019-06-28

本文共 1019 字,大约阅读时间需要 3 分钟。

调用函数可以说成是将函数应用于实参。如果传入所有的预期的参数,就完全应用了这个函数。如果只传入几个参数,就会得到一个偏应用函数。

偏应用函数是一个特殊的概念,在scala中它是使用val定义的,但是在使用时它却更像是一个函数。偏应用函数的定义更接近于python中有默认值的函数(scala实在是和python有太多相似的地方了)。

先来看一个例子:

import java.util.Datedef log(date: Date, message: String) {  //...   println(date + "----" + message)}val date = new Datelog(date, "message1")log(date, "message2")log(date, "message3")

示例中定义了一个log函数,在log函数中需要传入两个参数date和message。在之后又多次调用log函数,调用时使用了相同的date和不同的message。很显然,这里多次使用相同的date会让人有些小小的不耐烦。所以scala就提供了一个方案让人打消掉这小小的不耐烦:将log函数偏应用到date上,可以避免每次使用都要调用它。

看一下是如何实现的:

val logWithDateBound = log(new Date, _: String)logWithDateBound("message1")logWithDateBound("message2")logWithDateBound("message3")

在示例代码中先将一个值绑定到date参数上,然后用“_”使第二个参数未绑定,这样就构成了一个偏应用函数。然后这个偏应用函数被存到logWithDateBound这个引用里。随后就可以使用不同的message来调用这个新的函数了。

说到底这里还是定义了一个新的函数,不过在定义和使用上都比较自由罢了。说实话,目前我是觉得这个特性是有些华而不实的。这个特性的引入更像是在炒作一个旧有的概念,新瓶装旧酒总让人提不起兴致来。

看下教材上的解释:当创建偏应用函数时,Scala内部会创建一个新类,它有一个特殊的apply()方法。调用偏应用函数,实际上是调用这个apply方法。

##########

转载于:https://www.cnblogs.com/amunote/p/5721912.html

你可能感兴趣的文章
libevent学习
查看>>
动态代理的几种方式
查看>>
Collections常用方法总结
查看>>
微信小程序
查看>>
bash变量
查看>>
知识点049-supervisor
查看>>
干货满满,Android热修复方案介绍
查看>>
罗振宇跨年演讲之夜 阿里云护航得到App
查看>>
django中间键
查看>>
2017/09/22脚本练习
查看>>
Java通过几种经典的算法来实现数组排序
查看>>
Linux下安装apache可能遇到的问题总结
查看>>
Spring Boot整合MyBatis学习总结
查看>>
python: delete the duplicates in a list
查看>>
mongodb系列~ mongodb索引详解
查看>>
C/C++ —语言判断数字或字符的函数总结
查看>>
hadoop 安装前须知
查看>>
最长公共子串与最长公共子序列
查看>>
SVM多分类
查看>>
Python--matplotlib绘图可视化知识点整理
查看>>