最近遇到一些关于map()和map{}的问题,因此看了看网上的一些博客,自己做个小总结。

像如下
// map方法这样写不能编译通过
scala> List(2).map( case 2 => “OK” )

// 换做花括号就可以了
scala> List(2).map{ case 2 => “OK” }

1)scala中函数的小括号,可以用花括号来表示,即foo{xx} 与 foo(xx)是一回事儿。
2)对于只有一个参数的方法,其小括号是可以省略的,map(lambda)可写为 map lambda,即这块{case 2 => “OK”} 连同花括号整体是一个lambda(函数字面量)。

这儿显然是第2个(追究原因就要看编译器在语法解析式的优先级了,看样子把花括号对待为lambda字面量的一部分要高于把花括号当作小括号来对待),那么为什么加了花括号的{case 2 => “OK” }就可以当作一段函数字面量?

这要引出偏函数的概念,所谓偏函数(也叫部分函数)与完全函数想对应,普通的方法都是完全函数,即 f(i:Int) = xxx 是将所有Int类型作为参数的,是对整个Int集的映射;而偏函数则是对部分数据的映射,比如上面{case 2=> “OK” }就仅仅只对2做了映射。偏函数的实现都是通过模式匹配来表达的。

scala> val p:PartialFunction[Int,String] = { case 2 => “OK” }
因为偏函数是通过 { case x => y } 这种特殊的方式来描述的,上面的{case 2=>“OK”}就被当作了一段偏函数字面量,而偏函数背后的类型PartialFunction[A,B]是继承自Function1[A,B]的,所以将这段匿名的偏函数传给map方法是ok的。

小结:表达式 {case x=>y}会被当作偏函数字面量。

有这么几条原则:

1.当调用的函数有两个及其以上的参数的时候,这时候你只能用小括号。
2.当调用的函数只有一个函数的时候,花括号和小括号都可以使用。但是还有区别的。
3.如果使用小括号,意味着你告诉编译器:它只接受单一的一行,因此,如果你意外地输入2行或更多,编译器就会报错。但对花括号来说则不然,它可以接受多行的输入。foreachRDD和foreachPartition就是例子。
4.在调用一个单一参数的函数的时候,如果参数是用case实现的偏函数,那么你只能使用花括号。

Scala中大括号和小括号的区别相关推荐

  1. python 小括号 运算_浅析python 中大括号中括号小括号的区分

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...

  2. python中括号的作用_浅析python 中大括号中括号小括号的区分

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...

  3. shell脚本中的几个括号总结(小括号/大括号/花括号)

    [转载]shell脚本中的几个括号总结(小括号/大括号/花括号) (2011-10-08 21:23:34) 转载▼ 标签: 杂谈 分类: linux shell脚本中的几个括号总结(小括号/大括号/ ...

  4. shell中的括号(小括号,中括号,大括号/花括号)

    一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  5. php 正则 尖括号,php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符...

    PHP使用正则表达式提取字符串中尖括号<>.小括号().中括号[].大括号{}中的字符示例,需要的朋友可以参考下 代码如下: $str="你好(爱)[北京]{天安门}" ...

  6. python中大括号是什么意思_浅析python 中大括号中括号小括号的区分

    python语言最常见的括号有三种,分别是:小括号( ).中括号[ ]和大括号也叫做花括号{ }.其作用也各不相同,分别用来代表不同的python基本内置数据类型. 1.python中的小括号( ): ...

  7. shell中的括号(小括号,大括号/花括号)

    在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var}  2.$(cmd)  3.()和{}  4.${var:-string},${var:+str ...

  8. shell中的括号(小括号,中括号,大括号)

    一.小括号,园括号() 1.单小括号 () ①命令组.括号中的命令将会新开一个子shell顺序执行,所以括号中的变量不能够被脚本余下的部分使用.括号中多个命令之间用分号隔开,最后一个命令可以没有分号, ...

  9. shell中的括号(小括号,大括号/花括号)的使用方法

    在这里我想说的是几种shell里的小括号,大括号结构和有括号的变量,命令的用法,如下: 1.${var}  2.$(cmd)  3.()和{}  4.${var:-string},${var:+str ...

最新文章

  1. 容灾管理服务器是设备还是系统,卷管理与集群建设用户容灾系统的介绍-to customer-医疗行业.doc...
  2. windows10访问ubuntu samba共享文件夹报错:不允许一个用户使用一个以上用户与服务器多重连接(没解决)
  3. SpringBoot项目下resources文件夹下的静态资源浏览器无法访问
  4. PHP的几种排序算法的比较
  5. xilinx FPGA的远程更新(动态加载)详解(Using a Microprocessor to Configure 7 Series FPGAs)
  6. 谷歌离开游览器不触发_谷歌游览器
  7. Handler用法总结
  8. [Usaco2015 dec]Breed Counting
  9. 剑指offer系列48---左旋转字符串
  10. mac解压错误22无效的参数_看看PHP 7.3新版本中的JSON错误处理
  11. Go并发模式:管道与取消
  12. POI 实现Word替换书签
  13. 俄罗斯独立自主的计算机技术和计算机网络
  14. Jmeter接口测试及接口性能测试
  15. 嵌入式和单片机的区别
  16. php7.4 ffi,PHP7.4中FFI的介绍(代码示例)
  17. 桌面上计算机图标老是自动删除,win7系统总是自动删除桌面快捷方式怎么办
  18. 03、STM8程序下载方法
  19. ios是什么?ios有什么特点?
  20. Word控件Spire.Doc 【图像形状】教程(11): 如何在 C# 中为 Word 中的图像设置 Transeperant 颜色

热门文章

  1. android 画布旋转,Android自定义View叶子旋转完整版(六)
  2. app启动会闪白屏,怎么处理?
  3. k8s kubernetes 核心组件 CoreDNS 域名解析服务 学习总结
  4. IP网络广播对讲系统的先进性及系统功能
  5. AI+智慧知识服务生态体系研究设计与应用
  6. 揭密字节跳动薪资职级,资深软件测试工程师的收入你想象不到
  7. 字典和json相互转换
  8. 中华文化和中华民族的起源
  9. Fikker 反向代理服务器的 CDN 应用优化参考
  10. Rootkit与后门隐藏