热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Scala的基本类型及文本化介绍

这篇文章主要讲解了“Scala的基本类型及文本化介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习

这篇文章主要讲解了“Scala的基本类型及文本化介绍”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Scala的基本类型及文本化介绍”吧!

Scala的基本类型

表格5.1显示了Scala的许多基本的类型和其实例值域范围。总体来说,类型Byte,Short,Int,Long和Char被称为整数类型:integral type。整数类型加上Float和Double被称为数类型:numeric type。

表格 5.1 一些基本类型

Scala的基本类型及文本化介绍

除了String归于java.lang包之外,其余所有的基本类型都是包scala的成员。 如,Int的全名是scala.Int。然而,由于包scala和java.lang的所有成员都被每个Scala源文件自动引用,你可以在任何地方只用简化名(就是说,像Boolean,或Char,或String这样的名字)。

注意

目前实际上你可以使用与Java的原始类型相一致的Scala值类型的小写化名。比如,Scala程序里你可以用int替代Int。但请记住它们都是一回事:scala.Int。Scala社区实践提出的推荐风格是一直使用大写形式,这也是我们在这本书里做的。为了纪念这个社区推动的选择,将来Scala的版本可能不再支持乃至移除小写变体,因此跟随社区的大流,在你的Scala代码中使用Int而非int才是明智之举。

敏锐的Java开发者会注意到Scala的基本类型与Java的对应类型范围完全一样。这让Scala编译器能直接把Scala的值类型:value type实例,如Int或Double,在它产生的字节码里转译成Java原始类型。

文本

所有在表5.1里列出的基本类型都可以写成文本:literal。文本是直接在代码里写常量值的一种方式。

整数文本

类型Int,Long,Short和Byte的整数文本有三种格式:十进制,十六进制和八进制。整数文本的开头方式说明了数字的基。如果数开始于0x或0X,那它是十六进制(基于16),并且可能包含从0到9,及大写或小写的从A到F的数字。举例如下:

scala> val hex = 0x5 hex: Int = 5 scala> val hex2 = 0x00FF hex2: Int = 255 scala> val magic = 0xcafebabe magic: Int = -889275714

请注意,不论你用什么形式的整数文本初始化,Scala的shell始终打印输出基于10的整数值。因此解释器会把你用文本0x00FF初始化的hex2变量的值显示为十进制的255。(当然,你也可以不采信我们的话。开始感受语言的好方法是你一边读本章的时候一边在解释器里试试这些语句。)如果数开始于零,就是八进制(基于8)的,并且只可以包含数字0到7。下面是一些例子:

scala> val oct = 035 // (八进制35是十进制29)  oct: Int = 29 scala> val nov = 0777 nov: Int = 511 scala> val dec = 0321 dec: Int = 209

如果数开始于非零数字,并且没有被修饰过,就是十进制(基于10)的。例如:

scala> val dec1 = 31 dec1: Int = 31 scala> val dec2 = 255 dec2: Int = 255 scala> val dec3 = 20 dec3: Int = 20

如果整数文本结束于L或者l,就是Long类型,否则就是Int类型。一些Long类型的整数文本有:

scala> val prog = 0XCAFEBABEL  prog: Long = 3405691582 scala> val tower = 35L  tower: Long = 35 scala> val of = 31l  of: Long = 31

如果Int类型的文本被赋值给Short或者Byte类型的变量,文本就会被看作是能让文本值在那个类型有效范围内那么长的Short或者Byte类型。如:

scala> val little: Short = 367 little: Short = 367 scala> val littler: Byte = 38 littler: Byte = 38

浮点数文本

浮点数文本是由十进制数字,可选的小数点和可选的E或e及指数部分组成的。下面是一些浮点数文本的例子:

scala> val big = 1.2345 big: Double = 1.2345 scala> val bigger = 1.2345e1  bigger: Double = 12.345 scala> val biggerStill = 123E45  biggerStill: Double = 1.23E47

请注意指数部分表示的是乘上以10为底的幂次数。因此,1.2345e1就是1.2345乘以101,等于12.345。如果浮点数文本以F或f结束,就是Float类型的,否则就是Double类型的。可选的,Double浮点数文本也可以D或d结尾。Float文本举例如下:

scala> val little = 1.2345F  little: Float = 1.2345 scala> val littleBigger = 3e5f  littleBigger: Float = 300000.0

***一个值可以用以下(或其他)格式表示为Double类型:

scala> val anotherDouble = 3e5  anotherDouble: Double = 300000.0 scala> val yetAnother = 3e5D  yetAnother: Double = 300000.0

字符文本

字符文本可以是在单引号之间的任何Unicode字符,如:

scala> val a = 'A' a: Char = A

除了在单引号之间显式地提供字符之外,你还可以提供一个表示字符代码点的前缀反斜杠的八进制或者十六进制数字。八进制数必须在'\0'和'\377'之间。例如字母A的Unicode字符代码点是八进制101。因此:

scala> val c = '\101' c: Char = A

字符文本同样可以以前缀\u的四位十六进制数字的通用Unicode字符方式给出,如:

scala> val d = '\u0041' d: Char = A  scala> val f = '\u0044' f: Char = D

实际上,这种unicode字符可以出现在Scala程序的任何地方。例如你可以这样写一个标识符:

scala> val B\u0041\u0044 = 1 BAD: Int = 1

这个标识符被当作BAD,上面代码里的两个unicode字符扩展之后的结果。通常,这样命名标识符是个坏主意,因为它太难读。然而,这种语法能够允许含非ASCII的Unicode字符的Scala源文件用ASCII来代表。

表格 5.2 特殊字符文本转义序列

Scala的基本类型及文本化介绍  

最终,还有一些字符文本被表示成特殊的转义序列,参见表格5.2。例如:

scala> val backslash = '\\' backslash: Char = \

字串文本

undefined

scala> val hello = "hello" hello: java.lang.String = hello

引号内的字符语法与字符文本相同,如:

scala> val escapes = "\\\"\'" escapes: java.lang.String = \"'

由于这种语法对于包含大量转义序列或跨越若干行的字串很笨拙。因此Scala为原始字串:raw String引入了一种特殊的语法。以同一行里的三个引号(""")开始和结束一条原始字串。内部的原始字串可以包含无论何种任意字符,包括新行,引号和特殊字符,当然同一行的三个引号除外。举例来说,下面的程序使用了原始字串打印输出一条消息:

println("""Welcome to Ultamix 3000.               Type "HELP" for help.""")

运行这段代码不会产生完全符合所需的东西,而是:

Welcome to Ultamix 3000.               Type "HELP" for help.

原因是第二行前导的空格被包含在了字串里。为了解决这个常见情况,字串类引入了stripMargin方法。使用的方式是,把管道符号(|)放在每行前面,然后在整个字串上调用stripMargin:

println("""|Welcome to Ultamix 3000.               |Type "HELP" for help.""".stripMargin)

这样,输出结果就令人满意了:

Welcome to Ultamix 3000.  Type "HELP" for help.

符号文本

符号文本被写成&#39;<标识符>,这里<标识符>可以是任何字母或数字的标识符。这种文本被映射成预定义类scala.Symbol的实例。特别是,文本&#39;cymbal将被编译器扩展为工厂方法调用:Symbol("cymbal")。符号文本典型的应用场景是你在动态类型语言中使用一个标识符。比方说,或许想要定义个更新数据库记录的方法:

scala> def updateRecordByName(r: Symbol, value: Any) {       // code goes here      }  updateRecordByName: (Symbol,Any)Unit

方法带了一个符号参数指明记录的字段名和一个字段应该更新进记录的值。在动态类型语言中,你可以通过传入一个未声明的字段标识符给方法调用这个操作,但Scala里这样会编译不过:

scala> updateRecordByName(favoriteAlbum, "OK Computer")  < console>:6: error: not found: value favoriteAlbum      updateRecordByName(favoriteAlbum, "OK Computer")

基本同样简洁的替代方案是,你可以传递一个符号文本:

scala> updateRecordByName(&#39;favoriteAlbum, "OK Computer")

除了发现它的名字之外,没有太多能对符号做的事情:

scala> val s = &#39;aSymbol  s: Symbol = &#39;aSymbol  scala> s.name  res20: String = aSymbol

另一件值得注意的事情是符号是被拘禁:interned的。如果你把同一个符号文本写两次,那么两个表达式将指向同一个Symbol对象。

布尔型文本

布尔类型有两个文本,true和false:

scala> val bool = true bool: Boolean = true scala> val fool = false fool: Boolean = false

感谢各位的阅读,以上就是“Scala的基本类型及文本化介绍”的内容了,经过本文的学习后,相信大家对Scala的基本类型及文本化介绍这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程笔记,小编将为大家推送更多相关知识点的文章,欢迎关注!


推荐阅读
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Java和JavaScript是什么关系?java跟javaScript都是编程语言,只是java跟javaScript没有什么太大关系,一个是脚本语言(前端语言),一个是面向对象 ... [详细]
  • 开发笔记:对称加密详解,以及JAVA简单实现
     (原)常用的加密有3种1、正向加密,如MD5,加密后密文固定,目前还没办法破解,但是可以能过数据库撞库有一定概率找到,不过现 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了作者在开发过程中遇到的问题,即播放框架内容安全策略设置不起作用的错误。作者通过使用编译时依赖注入的方式解决了这个问题,并分享了解决方案。文章详细描述了问题的出现情况、错误输出内容以及解决方案的具体步骤。如果你也遇到了类似的问题,本文可能对你有一定的参考价值。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • C++字符字符串处理及字符集编码方案
    本文介绍了C++中字符字符串处理的问题,并详细解释了字符集编码方案,包括UNICODE、Windows apps采用的UTF-16编码、ASCII、SBCS和DBCS编码方案。同时说明了ANSI C标准和Windows中的字符/字符串数据类型实现。文章还提到了在编译时需要定义UNICODE宏以支持unicode编码,否则将使用windows code page编译。最后,给出了相关的头文件和数据类型定义。 ... [详细]
  • Java中包装类的设计原因以及操作方法
    本文主要介绍了Java中设计包装类的原因以及操作方法。在Java中,除了对象类型,还有八大基本类型,为了将基本类型转换成对象,Java引入了包装类。文章通过介绍包装类的定义和实现,解答了为什么需要包装类的问题,并提供了简单易用的操作方法。通过本文的学习,读者可以更好地理解和应用Java中的包装类。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
author-avatar
语涵星空
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有