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字符穿插值器的更多相关文章

  1. Spark记录-scala快速入门

    1.hello world程序 object HelloWorld { def main(args: Array[String]) { println("Hello,World!" ...

  2. Spark记录-Scala数据类型

    Scala与Java具有相同的数据类型,具有相同的内存占用和精度.以下是提供Scala中可用的所有数据类型的详细信息的表格: 序号 数据类型 说明 1 Byte 8位有符号值,范围从-128至127 ...

  3. YYModel 源码解读(二)之YYClassInfo.h (2)

    /** Instance variable information. */ @interface YYClassIvarInfo : NSObject @property (nonatomic, as ...

  4. iOS 保存、读取与应用状态

    固化 对于大多数iOS应用,可以将其功能总结为:提供一套界面,帮助用户管理特定的数据.在这一过程中,不同类型的对象要各司其职:模型对象负责保存数据,视图对象负责显示数据,控制器对象负责在模型对象与视图 ...

  5. python之正则表达式

    1) 用管道符号(|)匹配多个正则表达式 举例 at | home     匹配 at, home 2) 匹配任意一个单个的字符(.) 举例 f.o  匹配在"f"和"o ...

  6. Java程序员的日常——存储过程知识普及

    存储过程是保存可以接受或返回用户提供参数的SQL语句集合.在日常的使用中,经常会遇到复杂的业务逻辑和对数据库的操作,使用存储过程可以进行封装.可以在数据库中定义子程序,然后把子程序存储在数据库服务器, ...

  7. struts的学习笔记

    Struts 2是在WebWork2基础发展而来的. 注意:struts 2和struts 1在代码风格上几乎不一样. Struts 2 相比Struts 1的优点: 1.在软件设计上Struts 2 ...

  8. Linux_几个常用的命令

    一.基本命令 查看当前路径:pwd 切换文件夹:cd 查看当前用户: who/whoami 取文件前3行:head -3 文件 取文件尾3行:tail -3 文件 切换用户: su - [用户名] 查 ...

  9. Struts2基础学习总结

    引用自:http://www.cnblogs.com/jbelial/archive/2012/05/10/2486886.html Struts 2是在WebWork2基础发展而来的. 注意:str ...

随机推荐

  1. 利用 Docker Compose 搭建 SpringBoot 运行环境(超详细步骤和分析)

    0.前言 相信点进来看这篇文章的同学们已经对 Docker Dompose 有一定的了解了,下面,我们拿最简单的例子来介绍如何使用 Docker Compose 来管理项目. 本文例子: 一个应用服务 ...

  2. 【Angular】学习笔记-环境部署、项目建立相关

    Angular官网>搭建环境 首先要安装Node.js.官网>Download 一直next就好了. 安装node.js的目的是使用npm这些命令啦 然后这里推荐下载使用git SCM 也 ...

  3. 【Untiy】完美解决Untiy Package Manager无限加载的问题

    直接上干货 打开记事本,复制一下zhei个 @echo offset HTTP_PROXY=127.0.0.1set HTTPS_PROXY=127.0.0.1start "" & ...

  4. 在标准实体特殊消息上注册插件及Dynamics CRM 2015中计算字段的使用

    关注本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复157或者20151005可方便获取本文,同时可以在第一时间得到我发布的最新的博文信息,follow me! 前面的 插件系列博客教程 讲述了 ...

  5. CICD-Jenkins笔记2014-2018

    CICD-Jenkins笔记2014-2018 20141119 chenxin 20180726 chenxin update 四个环境,开发/测试/预发布/生产. 文中涉及的最新脚本,请查看西部战 ...

  6. Mysql存储过程--大于十分钟执行

    --存储过程 DELIMITER | DROP PROCEDURE IF EXISTS update_tatus | CREATE PROCEDURE update_status() BEGIN mi ...

  7. fastadmin中js是如何调用的

    想要了解fastadmin中的js是怎么调用的,就应该先了解RequireJs. RequireJs是模块化工具,每一个我们自己的js文件或者库都可以看成是一个模块,按需引入.写法如下: <sc ...

  8. bay——巡检RAC操作.txt

    Oracle Cluster Software 包括下列组件:Event Management (EVM)Cluster Synchronization Services (CSS)Cluster R ...

  9. Day4- Python基础4 深浅拷贝、三目运算、列表生成式,迭代器&生成器、装饰器

    本节内容: 1.深浅拷贝 2.三目运算 3.迭代器和生成器 4.装饰器 1.深浅拷贝 拷贝意味着对数据重新复制一份,深浅拷贝的含义就是:对于修改复制的数据是否会影响到源数据,拷贝操作对于基本数据结构需 ...

  10. SQL Server 移位运算符

    参考链接:http://dataeducation.com/bitmask-handling-part-4-left-shift-and-right-shift/ SQL Server 官网的连接:h ...