Scala字符穿插值器
从2.10.0版本开始,Scala提供了三种创新的字符串插值方法: s、f 和 raw
于2.11.0版本开始,用于模式匹配patter match中
小结:
s:
s"Hello, $name" //变量插值
s"1 + 1 = ${1+1}" //任意表达式插值
f:
f"$name%s is $height%2.2f meters tall" //插值后,格式化字符串
raw:
raw"a\nb" //对子面值中的字符不做编码 \n、\t等都不编译
自定义插值,用到在学
s字符串插值器
在任何字符串前加上s,就可以直接在串中使用变量了。
scala> val name = "James"
name: String = James
scala> s"Hello, $name"
res2: String = Hello, James
字符串插值器也可以处理任意的表达式
任何表达式都可以嵌入到${}中
scala> println(s"1 + 1 = ${1+1}")
1 + 1 = 2
f插值器
在任何字符串前面加上f,就可以生成简单的格式化串,功能相似与其他语言中的printf函数。
当使用f插值器的时候,所有的变量引用都应当后跟一个printf-style格式的字符串,如%d、%s.
scala> val height = 1.9d
height: Double = 1.9
scala> val name = "James"
name: String = James
scala> f"$name%s is $height%2.2f meters tall"
James is 1.90 meters tall
如果试图向只支持int的格式化串传入一个double值,则编译器会报错
scala> val height: Double = 1.9d
height: Double = 1.9
scala> f"$height%4d"
<console>:13: error: type mismatch;
found : Double
required: Int
^f插值器利用了Java中的字符串数据格式。
如果在具体变量后没有%,则格式化程序默认使用%s(串型)格式。
这种以%开头的格式在[Formatter javadoc]中有相关描述。
raw插值器
除了对子面值中的字符不做编码外,raw插值器与s插值器在功能上是相同的。
如下是个被处理过的字符串
scala> s"a\nb"
res0: String =
a
b //此处解析了\n
scala> raw"a\nb"
res1: String = a\nb //此处没有解析\n
除了 以上三种字符串插值器外,使用这可以自定义插值器
高级用法 (先暂搁置,需要再来学)
在Scala中,所有处理过的字符串字面值都进行了简单转码转换,任何时候编译器遇到一个如下形式的字符串子面值:
id"string contect"它都会被转换称一个StringContext实例的call(id)方法。这个方法在隐式范围内仍可用。
只需要简单的建立一个隐式类,给StringContext实例对象添加一个新方法,便可以定义我们自己的
字符串插值器。
参考:https://blog.csdn.net/u013063153/article/details/75599681
Scala字符穿插值器的更多相关文章
- Spark记录-scala快速入门
1.hello world程序 object HelloWorld { def main(args: Array[String]) { println("Hello,World!" ...
- Spark记录-Scala数据类型
Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 ...
- YYModel 源码解读(二)之YYClassInfo.h (2)
/** Instance variable information. */ @interface YYClassIvarInfo : NSObject @property (nonatomic, as ...
- iOS 保存、读取与应用状态
固化 对于大多数iOS应用,可以将其功能总结为:提供一套界面,帮助用户管理特定的数据.在这一过程中,不同类型的对象要各司其职:模型对象负责保存数据,视图对象负责显示数据,控制器对象负责在模型对象与视图 ...
- python之正则表达式
1) 用管道符号(|)匹配多个正则表达式 举例 at | home 匹配 at, home 2) 匹配任意一个单个的字符(.) 举例 f.o 匹配在"f"和"o ...
- Java程序员的日常——存储过程知识普及
存储过程是保存可以接受或返回用户提供参数的SQL语句集合.在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装.可以在数据库中定义子程序,然后把子程序存储在数据库服务器, ...
- struts的学习笔记
Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 ...
- Linux_几个常用的命令
一.基本命令 查看当前路径:pwd 切换文件夹:cd 查看当前用户: who/whoami 取文件前3行:head -3 文件 取文件尾3行:tail -3 文件 切换用户: su - [用户名] 查 ...
- Struts2基础学习总结
引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...
随机推荐
- IDEA提示找不到Mapper接口:Could not autowire.No beans of 'xxxMapper' type found
前言 相信大多数互联网公司的持久层框架都是使用 Mybatis 框架,而大家在 Service 层引入自己编写的 Mapper 接口时应该会遇到下面的情况: 我们可以看到,上面的红色警告在提示我们,找 ...
- ThinkPHP6框架的下载与安装
thinkphp6发布也有一段时间了,相对来说比较稳定,是时候学习一下thinkphp6框架,提前学习,到正式发布的时候,可以直接拿来做正式的项目,先人一步.thinkPHP6.0在5.1的基础上对底 ...
- springboot项目创建,及运行
1. File --> new --> spring Initializr(选择jdk,和默认的url)-->next-->通过dubbo调用的服务可以直接下一步,也可以选择w ...
- 38-docker managed volume
docker managed volume 与 bind mount 在使用上的最大区别是不需要指定 mount 源,指明 mount point 就行了.还是以 httpd 容器为例: 我们通过 - ...
- Linux:用户权限管理
用户与用户组的概念 超级用户 拥有对系统的最高管理权限,默认是 root 用户 普通用户 只能对自己目录下的文件进行访问和修改,具有登录系统的权限. 虚拟用户 也叫"伪"用户,这类 ...
- JUC-0-JUC简介
Java JUC 简介 在 Java 5.0 提供了 java.util.concurrent (简称 JUC )包,在此包中增加了在并发编程中很常用 的实用工具类,用于定义类似于线程的自定义子 ...
- myeclipse使用
安装一个myeclipse10或者2015 2014都可以 支持最高的JDK为7 myeclipse可以永久使用需要激活 有几步骤 myeclipse打开之后--windows--show view ...
- npm --save-dev 和 --save 的区别
转载 >>> 1. npm install 在安装 npm 包时,有两种命令参数可以把它们的信息写入 package.json 文件, 一个是npm install--save ...
- Python 爬虫介绍,什么是爬虫,如何学习爬虫?
作为程序员,相信大家对“爬虫”这个词并不陌生,身边常常会有人提这个词,在不了解它的人眼中,会觉得这个技术很高端很神秘.不用着急,我们的爬虫系列就是带你去揭开它的神秘面纱,探寻它真实的面目. 爬虫是 ...
- 为什么不允许使用 Java 静态构造函数?
不允许使用 Java 静态构造函数,但是为什么呢?在深入探讨不允许使用静态构造函数的原因之前,让我们看看如果要使 构造函数静态化 会发生什么. Java 静态构造函数 假设我们有一个定义为的类: pu ...