map相关问题及匿名函数的问题
来源:互联网 发布:linux service 配置 编辑:程序博客网 时间:2024/06/06 17:15
List(1,2) map { i => println("hi");i+1},对于这个函数其可以写成更精确的形式:List(1,2) map { i => {println("hi");i+1}},后面的两个语句其实是一个函数体,因此输出的结果是hi hi List(2,3)
List(1,2) map { println("hi"); _+1},对于这个函数,其结果为hi List(2,3),这是由于对于使用“_”作为参数的匿名函数,只有包含“_”的部分才是真正的函数,也就是说,前面的函数可以更精确的表示为List(1,2) map { println("hi"); {i => i+1}},因此最终是向map传递了一个匿名函数,其函数体是i+1
List(1,2) map {"abc"},这个表达式返回的结果是List('b','c'),这个结果对于我们来说可能有些奇怪,不过仔细分析一下就可以得到这个结果了,对于int类型的List,其后面的map需要一个函数,这个函数的类型是:int =>Any的类型,其中前面的int是通过List的迭代传过来的值也就是1,2,而函数是一个String类型的字符串,这个时候就会触发一个隐式的转换将String类型的数据转换为scala.collection.immutable.StringOps 的类型,而这个类型有一个override def apply(index: Int): Char = repr charAt index函数,这样上面的map函数的参数就变成了{i =>"abc" charAt i}于是乎就变成了最终的List(b,c)结果了(也可以是"abc".apply(i),由于给一个对象传递一个参数的时候会隐式的调用这个对象的apply方法).
另外还有一点需要提及,在上面的map函数后面有时候我们可以看到(),有时候看到的是{},这两者并没有区别,对于()通常是传递的小型的函数,而对于{},实在代码中明确包含“;”或者换行(也即是隐式的分号)的时候,因此可以用()的地方一定可以用{},如println()其实可以写成println{},尽管这看起来有点奇怪
- map相关问题及匿名函数的问题
- Oracel 相关的函数及问题
- 匿名函数私有化问题
- 在Fragment控件的匿名内部类中使用运行时权限及相关问题
- 问题:jquery的map()函数问题
- php匿名函数,参数及怎么掉的问题,终极大揭秘
- send函数特点及相关问题
- send函数特点及相关问题
- [multi]set/map/table/hash 及海量数据相关问题
- _tmain函数的相关问题
- AfxExtractSubString 函数的相关问题
- 多线程BUG捕捉之:匿名函数带来的问题
- 多线程BUG捕捉之:匿名函数带来的问题
- JavaScript事件监听匿名函数的this问题
- 主页面调用iframe里面匿名Javascript函数的问题
- 关于匿名函数构造器的继承问题
- python 匿名函数捕获变量值的问题
- PHP 匿名函数 引用变量 调用自身的问题
- mysql读写分离
- 【cpp】引用、指针、const
- 机器语言的理解
- 数位DP模板
- Java基础之GC回收
- map相关问题及匿名函数的问题
- Android 调用系统相机拍照、录像
- java处理异常的标准格式
- HTTP和HTTPS的区别
- [GO] mac cannot find package "fmt"
- ajax请求简单封装
- 计划-8/6:各种同步控制工具的使用
- mysql如何在命令行创建数据库
- ZooKeeper学习第一期---Zookeeper简单介绍