当前位置: 首页 > news >正文

scala Option,None和Some

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

option的出现是为了解决null存在各种歧义的情况。最常见的一种情况是假设我们对一个map去值,我们调用Map.get(“key”)方法,在java中如果我们得到结果为null,可能代表这个”key”存在,但是对应的value为空,也可能代表这个”key”不存在于map中。因此在scala中有了option这个类来解决返回null的问题。 
  在Java 里,null 是一个关键字,不是一个对象,所以对它调用任何方法都是非法的。但是这对语言设计者来说是一件令人疑惑的选择。为什么要在程序员希望返回一个对象的时候返 回一个关键字呢?为了让所有东西都是对象的目标更加一致,也为了遵循函数式编程的习惯,Scala 鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option 类型。在没有值的时候,使用None。如果有值可以引用,就使用Some 来包含这个值。none和some是option的子类。

val temp = Map(
  "a" -> "A",
  "b" -> "B",
  "c"->"C",
  "d"->"D",
"e"->null
)
println( "a: " + temp.get("a").get )
println( "b: " + temp.get("b").get )
println( "e: " + temp.get("e").get)
//会报Exception in thread "main" java.util.NoSuchElementException: None.get错
//println( "f: " + temp.get("f").get)
println( "f: " + temp.get("f").getOrElse("F"))

输出如下:

a: A
b: B
e: null
f: F

 

转载于:https://my.oschina.net/u/2000675/blog/1802246

相关文章:

  • 安装 mysql 数据库, 并做 主 从(一)
  • 《汇编语言第二版——王爽》实验五,5、6题
  • Java面向对象编程
  • elasticsearch无故关闭,Log无报错
  • Java消息中间件入门笔记 - ActiveMQ篇
  • 下载的面试题
  • 创建React App, 完成TodoList版HelloWorld
  • bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
  • 测试策略和测试计划的区别?
  • 美国某实验室承认使用量子网络已经两年多
  • 【剑指offer】左旋转字符串,C+实现
  • vector中如何按条件删除元素
  • DOTween-Ease缓动函数
  • swift使用查阅资料备份2
  • win32环境下显示中文
  • @jsonView过滤属性
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CAP理论的例子讲解
  • Java 网络编程(2):UDP 的使用
  • javascript 哈希表
  • Magento 1.x 中文订单打印乱码
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • vue.js框架原理浅析
  • 构建工具 - 收藏集 - 掘金
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 技术:超级实用的电脑小技巧
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 一起参Ember.js讨论、问答社区。
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • Java总结 - String - 这篇请使劲喷我
  • ​渐进式Web应用PWA的未来
  • #QT(智能家居界面-界面切换)
  • #ubuntu# #git# repository git config --global --add safe.directory
  • #WEB前端(HTML属性)
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (WSI分类)WSI分类文献小综述 2024
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (力扣)1314.矩阵区域和
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
  • 、写入Shellcode到注册表上线
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net core使用RPC方式进行高效的HTTP服务访问
  • .Net Memory Profiler的使用举例
  • .NET/C# 中设置当发生某个特定异常时进入断点(不借助 Visual Studio 的纯代码实现)
  • :“Failed to access IIS metabase”解决方法
  • @angular/cli项目构建--http(2)
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Transactional 竟也能解决分布式事务?
  • [ vulhub漏洞复现篇 ] struts2远程代码执行漏洞 S2-005 (CVE-2010-1870)
  • [Angular 基础] - 数据绑定(databinding)
  • [ASP.NET MVC]Ajax与CustomErrors的尴尬
  • [Docker]五.Docker中Dockerfile详解