scala编程-函数与闭包
2015-06-10 09:29
204 查看
3.头等函数
3.1object foreach_test{
val someNumbers = List(1,2,3,4,5,65)
//所有集合类都能用到的foreach方法。他以函数作为入参,并对每个元素都调用该函数,下面是如何用他打印输出所有列表元素的代码:
someNumbers.foreach((x:Int) => println(x))
}
foreach_test
3.2
object myFilter{
val someNumbers = List(1,2,3,5,7,9)
//集合类的filter方法选择集合里可以通过用户提供的测试的元素。测试时通过调用作为入参的函数实现的
val newList = someNumbers.filter((x:Int) => x > 5)
}
println(myFilter.newList)
4.函数字面量的短格式
4.0//一种让函数字面量更简短的方式是去除参数类型,某些参数的类型是被推断的
object myFilter{
val someNumbers = List(1,2,3,5,7,9)
//集合类的filter方法选择集合里可以通过用户提供的测试的元素。测试时通过调用作为入参的函数实现的
val newList = someNumbers.filter(x => x > 5)
}
println(myFilter.newList)
5占位符语法
5.0object myFilter{
val someNumbers = List(1,2,3,5,7,9)
//为了让函数字面量更加简洁,可以把下划线当做一个会更多参数的占位符,只要每个参数在函数字面量内仅出现一次
val newList = someNumbers.filter(_ > 3)
}
println(myFilter.newList)
5.1
错误
val f = _ + _
//有时把下划线当做参数的占位符,编译器可能无法推断缺失的参数类型
//error: missing parameter type for expanded function ((x$1, x$2) => x$1.$plus(x$2))
val f = _ + _
正确
val f = (_: Int) + (_:Int)
6.部分应用函数
6.1object myforeach{
val someNumbers = List(1,2,34,4,56)
//等价于someNumbers.foreach(x => println(x))
//因此这个例子中的下划线不是单个参数的占位符。他是整个列表的占位符。
someNumbers.foreach(println _)
}
myforeach
以这种方式使用下划线时,你就正在写一个部分应用函数。scala里当你调用函数,传入任何需要的参数,实际是把函数应用的到参数上。
相关文章推荐
- PHP array_diff_assoc()
- R.java was modified manually! Reverting to generated version!项目显示红色感叹号
- EditPlus配置Java语法自动补全功能
- 简单谈谈php中的unicode和utf8编码
- 【struts2】中method={1}详解
- Python自学笔记之函数式编程2——map/reduce
- c++ 智能指针用法详解
- C# 计算字符串/文件的哈希值(MD5、SHA)
- 2015年大一下第13周项目4-处理C++源代码的程序(1)main()函数
- java 中小数点的处理
- PHP中生成UUID自定义函数分享
- 第十四周 阅读项目 C++对文本输入输出
- c#语法总结2 - 函数
- 第十四周 阅读项目 C++字符创的标准输入输出
- 第3章 窗口与消息_3.1Windows编程模型
- python操作excel之xlrd
- 【C++】DISALLOW_COPY_AND_ASSIGN
- python实现PKCS5Padding
- myeclipse 安装SVN插件
- Java实现不同excel格式(*.xls、*.xlsx)文件的读取