Scala中的底类型(bottom types)

【信息科学与工程学】计算机科学与自动化——第二十四篇 编译器10——编译原理与词法分析02 链接时优化:全局DCE(579)、LTO(580)安全编译:CFI(581、586)、ASan(582)、UBSan(583)、MSan(584)、TSan(585)、CET(587)、PAC(588)、MTE(589)、SFI(590)、Wasm沙箱(591)侧信道与秘密:侧信道缓解(592)、常量时间(593)、秘密清理(594)内存安全:ASLR(595)、栈保护(596)、整数溢出检测(597)、除零检测(598)、空指针检测(599)、数组边界检查(600)至此编号达到600。 阅读详情

在Scala中存在两个比较特殊的类,Scala.Null和Scala.Nothing。它们是Scala面向对象的类型系统用于处理一些“极端情况”的特殊类型。

Null类是null引用的类型,他是每个引用类(即继承自AnyRef的类)的子类,null值可以用来给引用类初始化。但是Null并不兼容于值类型,即你不可能将null赋值给一个整数变量:

val i: Int = null

以上写法是不对的。

Nothing位于Scala类继承关系的最底部,它是每个其他类型的子类型,并且,不存在这个类型的任何值。那么,Nothing类型的意义何在呢?

作为参数类型。

在Scala的List中有一个特殊的存在,Nil,如果使用过Nil你就会发现,Nil实际上就是一个List[Nothing]。所以Nil可以与任何类型的元素进行集合的相关操作,例如1 ::Nil,”abc” :: Nil,最终得到的集合结果会根据添加的元素类型决定,因为Nothing是任何类的子类,它可以被归为任何List中去。

非正常终止信号

在Scala中抛出异常跟Java一样,需要创建一个异常对象然后用throw关键字将它抛出:

throw new IllegalArgumentException

并且,在Scala中,抛出异常的动作throw是一个有结果类型的表达式,这个结果的类型就是Nothing。如下示例:

val half:Int =

If ( n % 2 == 0)

n / 2

else

throw new RuntimeException(“n must be even”)

在这段代码中,如果n是偶数,那么half会被赋值为n的一半,如果n不是偶数那么half被初始化之前,就会有异常抛出。而你如此写不用担心half的类型问题,因为技术上讲,抛出异常这个表达式的类型是Nothing。在这个场景下,if的一个分支计算出某个值,而另一个分支抛出异常并计算出Nothing,整个if表达式的类型就是那个计算出某个值的分支。

再举例来说,在Scala的标准类库中Predef对象有一个error方法,其定义如下:

def error(message:String):Nothing =

throw new RuntimeException(message)

error方法的返回值类型是Nothing,这告诉使用方该方法并不会正常返回,它会抛出异常。对error的使用如下:

def divide(x: Int, y: Int): Int =

if (y != 0) x / y

else error(“can’t divide by zero”)

这里的x/y条件判断的then分支的类型为Int,而else分支类型为Nothing,由于Nothing是Int的子类型,整个条件判断表达式的类型就是Int,正如方法声明要求的那样。

 

5分钟搞定:用Pyannote和Whisper实现带说话人分离的语音转文字(附完整代码) 本文详细介绍了如何快速构建一个集成了说话人分离功能的语音转文字系统。通过结合OpenAI的Whisper模型进行高精度语音识别和Pyannote模型实现说话人分离,并提供了完整的代码实现、环境搭建指南以及核心的对齐与合并逻辑,帮助开发者高效处理会议录音、访谈等多说话人音频,实现自动化转录。 阅读详情

相关推荐

谷歌Gemini模型免费API调用全攻略:从注册到实战(附代码示例)

本文详细介绍了如何免费调用谷歌Gemini模型的API,从注册获取API密钥到实战应用的全过程。内容涵盖环境准备、基础API调用、多模态处理、高级功能及生产环境实践,帮助开发者高效利用Gemini模型进行代码生成和复杂任务处理。附有代码示例,适合AI开发者和技术爱好者。

weixin_29212429的博客 1597

Scala中如何优雅的处理Null

前言 如果在scala代码还在使用ids!=null,可能会被有的人嘲笑,都什么年代了,竟然还有这样的写法,NullPointerException见少了吧? 不过,据统计: Spark 源代码使用了 821 次 Option 关键字,但它也直接在像if (ids != null)。 Spark 采用混合方式,大部分情况下使用 Option,但个别时候出于性能(这里主要是为了给使用这返回提示信息)原因才使用了null。 一个很好的习惯是当有方法返回值可能为null的时候,使用Option来代替。 什么是Op

SunnyRivers 4283

SpringCloudGateway网关高频20个面试题整理

Spring Cloud Gateway 是基于 Spring 5、Project Reactor 和 Spring Boot 2 构建的 API 网关,提供动态路由、监控、弹性、安全等核心功能。Spring Cloud Gateway 是 Spring Cloud 生态中的 API 网关,用于微服务架构中的请求路由、负载均衡、限流、鉴权等。实现@Component@Override// 逻辑处理。

u012024132的专栏 1114

Scala的null/空对象

引言 在Java中,我们通常用一个null来表示引用的缺失。但是,这样的做法会在代码里产生大量的判空逻辑: //常用的判空逻辑 if(null == someObejct){ ... ... }else { ... ... } 这种null对象的使用,会导致项目里散落着大量如上的代码,加大了代码量的同时,一旦我们忘记了对null的处理,就会导致整个程序的崩溃。所以,null对象一直是Java程序员不得不面对的琐事,而常见的解决方案,如单例对象(这样功能的对象可以在此处简称

qq_33115589的博客 4170

谷粒商城篇章9 ---- P248-P261/P292-P294 ---- 消息队列【分布式高级篇六】

RabbitMQ消息队列、RabbitMQ延时队列。

weixin_48568302的博客 1549

量子密钥分发系统的工程实践(四):FPGA在后处理中的核心实现与优化

本文深入探讨了FPGA在量子密钥分发(QKD)系统后处理中的核心实现与优化策略。文章详细拆解了FPGA如何高效完成原始密钥提取、误码协商和私密放大等关键任务,并分享了流水线设计、资源复用及存储器架构优化等工程实践“心法”,旨在解决高速、实时QKD系统中的性能瓶颈,提升密钥生成率。

t8u9v0的博客 387

理解Scala语言中Null/Nothing/Nil/None/Unit的区别

Prologue Scala语言虽然是构建在JVM体系之上的,但为了适应函数式编程的需要,它的语法和Java几乎完全不同,在很多基础层面——比如类型系统——也是自成一派的。在Scala类型系统中,Null、Nothing、Nil、None、Unit这些类型看起来似乎都表达“空”的语义,但实际上很有一些区别,容易混淆。本文来简单分辨一下。 作为预热,可以先看看来自官方文档的class hierarc...

LittleMagic's Blog 3395

PX4|Gazebo模型加载失败排查指南:从环境变量到资源路径的全面解析

本文针对PX4与Gazebo联合仿真中常见的'Unable to get model name'错误,提供了从环境变量配置、资源路径排查到网络访问问题的全面解决方案。详细解析了GZ_SIM_RESOURCE_PATH等关键变量的作用与设置方法,并给出了离线模型库部署等一劳永逸的修复指南,帮助开发者彻底解决无人机模型加载失败问题。

weixin_29243063的博客 1228

Scala中的 Unit 、Null 、Nothing类型

在Scala中,如果一个方法没有返回值,它的返回类型就是Unit。Nothing类型是所有类型的子类,表示一个没有实例的类型。在Scala中,Nothing类型没有对象,它主要用于表示一个方法或函数没有明确的返回值,或者表示一个永远不会返回的方法或函数。例如,如果一个方法抛出异常,那么该方法的返回类型就是Nothing‌4。在Scala中,Null类型只有一个对象,即null。在Scala中,Unit、Null、Nothing是三种特殊的类型,它们各自在Scala的类型系统中扮演着不同的角色。

2402_87076719的博客 563

研究生如何快速发CVPR

研究生如何快速发CVPR,找到科研方向

python_vb的博客 784

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

看完就会!手把手教您如何正确开启飞牛Nas 虚拟机的 IOMMU 硬件直通,让虚拟机的性能飙升!

XiaoqiangClub的博客 1万+

[Scala基础]--Null、null、 Nothing、 Nil、 None和Unit

原文:http://oldfashionedsoftware.com/2008/08/20/a-post-about-nothing/您听到的有关Scala语言的主要抱怨之一是与Java相比,它太复杂了。一般的开发者永远无法对类型系统,函数式编程语言等有足够的理解。这就是论点。为了支持这个位置,你会经常听到它指出Scala包含了一些虚无的概念(Null,null,Nil,Nothing,None和...

欢迎来到我的博客,一起探索代码里的世界! 9806

【ARM CoreLink 系列 4 -- NIC-400 控制器详细介绍】

正常情况下,一个NIC的实现,可以包含一百多个master和几十个slave,每个master和每个slave都会有一些寄存器,这些寄存器可以被 programming,实际实践中就会对 AMIB 或者 ASIB 或者 IB,当它需要具有 programming的时候,给它指定一个node number。为什么指定Node Number呢?首先,从CPU的角度,它需要有一个1M对齐的地址空间,在这1M地址空间上,对每个ASIB或者AMIB这样的接口给它一个node number以后,

CodingCos的博客 5239

Spark 3.5 + ECharts 出租车业务分析:3 类呼叫类型日趋势可视化实战

本文详细介绍了如何利用Spark 3.5和ECharts实现出租车业务的三维可视化分析,包括数据聚合、API接口设计和动态图表构建。通过处理千万级轨迹数据,提取呼叫类型-时间-数量关系,并结合Spring Boot和ECharts实现高效数据服务和动态排序、多轴联动等企业级可视化效果,为出租车业务提供实时洞察。

weixin_33831673的博客 338

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Scala中的Nothing类型

初学Scala的时候会碰到一个奇怪的东西:Nothing。翻译的话叫“啥都没有”?这个Nothing到底是什么,有什么用?下面是我个人的一些见解。 Nothing是什么 Nothing是一个类型(type)。就像Int、String一样是一个类型,比如值3是Int型的,值"abc"是Str...

chengqu0398的博客 2437

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

Scala数据类型

一、数据类型 (1)Scala中一切数据都是对象,都是Any的子类。 (2)Scala中数据类型分为两大类:数值类型(AnyVal)、 引用 类型(AnyRef),不管是值类型还是引用类型都是对象。 (3)Scala数据类型仍然遵守,低精度的值类型向高精度值类型, 自动转换(隐式转换)。 (4)Scala中的StringOps是对Java中的String增强 (5)Unit:对应Java中的void,用于方法返回值的位置,表 示方法 没有返回值。Unit是一个数据类型,只有一个对象 就是()。Void不是

efuns的博客 1883

Scala中的Any、Nothing、Null、Nil

Scala中的Any、Nothing、Null、Nil Any 在scala中,Any类是所有类的超类。Any有两个子类:AnyVal和AnyRef。 对于直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对于引用类型,AnyRef是它们的基类。 Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hash

Mr.Phoebe的专栏 6746

Scala之空值

为了让所有的东西都是对象的目标更加一致,也为了遵循函数式编程的习惯。Scala鼓励你在变量和函数返回值可能不会引用任何值的时候使用Option类型。Scala的Option类型可以避免NullPointerException情况,因此,Scala应用推荐使用Option类型来代表一些可选值。使用Option类型,读者一眼就可以看出这种类型的值可能为None。 如果没有值...

u012798083的专栏 6504

scala中NULL的option定义的字段初始化用Some

例子: var in = None:Option[FileInputStream] var out = None:Option[FileOutputStream] try{ in = Some(new FileInputStream("/tmp/text.class")) out = Some(new FileOutputStream("/tmp/text1.class")) }ca

春华秋实 2740

Scala 编程实战学习1-------如何处理代码中的NULL值?

目录 一、代码实现设计原则,即:应用程序尽可能分解成多个小的函数,每个函数实现一个完好的单一功能; 二、代码中NULL值处理策略;        今天阅读《Scala编程实战》一书中的“如何有效处理代码中的NULL值”小节,写下自己的心得体会,仅供参考,如有错误,还请各位指出,不胜感激,谢谢!      我记得今年3月份有次电话面试,面试官问我:在写Spark代码时,需注意哪些问题? 我当...

m0_37310689的博客 1064

Scala 数据类型(2)Unit类型 Null类型和Nothing 类型

基本说明 图片来自网络 总结 图片来自网络

小白鼠丶 1311

scala中的option[T]、Any、Nothing、Null、null、Nil、None、Some和Unit

scala中的option[T]、Any、Nothing、Null、null、Nil、None和Unit 1 Option[T] 、None 和 Some 2 Any 3.Nothing 4.Null与null 5、Nil 6、Unit 对人工智能感兴趣的同学,可以点击以下链接: 现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非...

周天祥的博客 8万+

Scala中的None,Nothing,Null,Nil

在scala中这四个类型名称很类似,作用确实完全不同的。 None是一个object,是Option的子类型,定义如下 case object None extends Option[Nothing] { def isEmpty = true def get = throw new NoSuchElementException("None.get") } scala推...

weixin_30670151的博客 560

scala 空对象

空对象Nil,Null,null,Unit,Nothing,None 1) Nothing 是trait,定义为:final trait Nothing extends Any。Nothing处于Scala类型体系的最底层,是所有类型的子类型,Nothing没有实例。 2) Null 是trait,定义为:final trait Null extends AnyRef 。Null是所有引用

qiezikuaichuan的专栏 4198

Scala与Java在空值上判定的探讨

本文章探讨Scala语言与Java语言在空值上的区别问题产生背景: 在编写Spark任务时采用Spark SQL向Oracle存数据,对RDD与DateFrame进行了去空值(如下但不限于以下几种)处理后仍然会有空异常,百思不得其解。 最后想到Spark框架采用Scala语言编写,虽然与Java一样都是JVM语言,但在语言类型上还是不同之处。

czhdolyec的博客 8075

Scala中的空

   Scala的有即Any,Scala的无是Null,null,Nil,Nothing,None,Unit.那么这几种空有什么区别呢? 一、Null&null   很多人一辈子都没有走出这个无。Null是一个Trait,你不能创建她它的实例。但是Scala在语言层面上存在一个Null的实例,那就是null。Java中的null意味着引用并没有指向任何对象。但存在一个悖论,一切都是对象...

weixin_34370347的博客 280

别再只盯着人脸了!手把手教你用Python复现2023年最新的多模态情绪识别模型COGMEN

本文详细介绍了如何使用Python和PyTorch复现2023年最新的多模态情绪识别模型COGMEN。该模型通过图神经网络(GNN)融合语音、文本和面部动作单元数据,显著提升了情绪识别的准确率。文章涵盖环境配置、数据预处理、模型架构实现、训练优化及部署应用,帮助开发者掌握这一前沿技术。

weixin_33691700的博客 521
上一篇: Spark与Flink 架构之间对比区别
下一篇: Node.js 18 新特性解读
IT小谷
博客等级 码龄5年 33粉丝 11原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值