[转] Scala 2.10.0 新特性之字符串插值
[From] https://unmi.cc/scala-2-10-0-feature-string-interpolation/
Scala 2.10.0 新特性之字符串插值
2013-01-20 — Yanbin
Scala 在处理字符串方面终于也与时俱进了,引入了字符串插件,这在许多脚本语言中就早已这么做了。有了这个特性,字面量字符串和变量连接可以不需要总是用加号进行丑陋的连接了。有些脚本语言会是只对双引号字符串解析其中的变量,单引号的不会,当然Scala 是要区分字符串和字符类型。
直白的讲字符串插值就是,val name="Unmi"; val greeting=s"Hello $name"; greeting 的值就是 "Hello name"。产生效应的就是那个 s 方法。
Scala 2.10.0 为我们提供了三种字符串插值的方式,分别是 s, f 和 raw。它们都是定义在 StringContext 中的方法。
s 字符串插值器
可以解析字符串中的变量,可以调用方法,还能进行计算。实际调用的是 StringContext 中的 s 方法。
val name = "Unmi"
println(s"Hello $name") //Hello Unmi, 实际上就是调用的 StringContext("Hello, ", "").s(name)
println(s"Hello ${name}qq) //Hello Unmiqq 界定变量用大括号{},s"Hello $nameq" 会试图解析变量 nameqq
println(s"1 + 1 = ${1 + 1} //1 + 1 = 2,能计算值 class Person(val name: String){
def say(what: String) = s"say $what"
}
val person = new Person("Unmi")
println(s"Hello ${person.name}, ${person.say(person.name)}") //Hello Unmi, say Unmi, 这个比较复杂
用大括号可以界定变量,{} 里可以求值,还可以使用属性和调用方法。
f 字符串插值器
它除 s 的功能外(不指定格式就和 s 一样),还能进行格式化输出,在变量后用 % 指定输出格式,格式的说明参照 Java 的 Formatter javadoc。实际调用的是 StringContext 中的 f 方法。
val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall") // James is 1.90 meters tall
raw 字符串插值
raw 能让字符串原原本本的输出来,而不是产生控制效果,如对 \n ,\t 等的输出。实际调用的是 StringContext 中的 raw 方法。看这个例子就知道了:
scala> println("a\nb\tc")
a
b c scala> println(raw"a\nb\tc")
a\nb\tc
除 Scala 提供的 s, f 和 raw 外,我们也可以参照 Scala 的实现方式,实现自己的插值处理器。参照 StringContext 中的 s, f 和 raw 方法。如实现:
id"String Content"
这需要通过隐式类为 StringContext 类增加相应的方法。这里不详解,具体方法见:http://docs.scala-lang.org/overviews/core/string-interpolation.html。
最后,目前字符串插值尚不能用于模式匹配中,将会在未来的 2.11 版本得到支持。
参考: 1. http://docs.scala-lang.org/overviews/core/string-interpolation.html
本文链接 https://unmi.cc/scala-2-10-0-feature-string-interpolation/, 来自 隔叶黄莺 Unmi Blog
[版权声明] 本文采用 署名-非商业性使用-相同方式共享 2.5 通用 (CC BY-NC-SA 2.5) 进行许可。
[转] Scala 2.10.0 新特性之字符串插值的更多相关文章
- C#6.0新特性之字符串嵌入 String Interpolation
6.0增加了 字符串嵌入值 的新语法糖. 以前我们做拼接的时候,一般这样写 var s = string.Format("this is a {0} !!!" , class1.p ...
- 【c#】6.0与7.0新特性介绍记录
c#发展史 引用地址:https://www.cnblogs.com/ShaYeBlog/p/3661424.html 6.0新特性 1.字符串拼接优化 语法格式:$”string {参数}” 解释: ...
- 背水一战 Windows 10 (1) - C# 6.0 新特性
[源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...
- Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性
Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...
- 返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API
原文:返璞归真 asp.net mvc (10) - asp.net mvc 4.0 新特性之 Web API [索引页][源码下载] 返璞归真 asp.net mvc (10) - asp.net ...
- 背水一战 Windows 10 (43) - C# 7.0 新特性
[源码下载] 背水一战 Windows 10 (43) - C# 7.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 7.0 新特性 介绍 C# 7.0 的新特性 示例 ...
- C# 9.0新特性
CandidateFeaturesForCSharp9 看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前 ...
- fir.im Weekly - 从 iOS 10 SDK 新特性说起
从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 的分屏多任务特性,今年的 WWDC iOS 10 SDK ...
- C#发展历程以及C#6.0新特性
一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...
随机推荐
- 如何获取.properties配置文件
如何获取.properties配置文件 分析思路: 先使用流和文件关联,即读取文件 再读取文件内容,一行一行读取 字符分割“=” 键值对 然后把键值对放到集合中去 但是Properties类里面有方 ...
- 实践作业3:白盒测试----开始测试用例的设计DAY3
白盒测试与黑盒测试很大不同之处在于白盒测试必须读相应代码,对代码有一定了解的情况下针对代码的逻辑进行测试用例的设计.白盒测试有六种覆盖标准:语句覆盖.判定覆盖.条件覆盖.判定/条件覆盖.条件组合覆盖和 ...
- Eclipse工具
1 ArrayList的常见方法 * a: add(参数) 向集合中添加元素 * b: get(int index) 取出集合中的元素,get方法的参数,写入索引 * c: size() 返回集合的长 ...
- App测试从入门到精通之更新测试
我们都知道,app在使用一段时间,都会有更新,而且更新会不止一次.在实际测试中,关于更新的测试场景也是我们需要重点关注的,接下来我们就看一下关于App的更新测试有哪些测试点我们需要注意: APP更新测 ...
- C#获取文件的Content-Type(MIME Type)的方法
使用静态类MimeMapping(需要.NET Framework 4.5及以后的支持) string fileName = "D:\myfile.txt"; var conten ...
- mysql_init调用卡住原因分析
有同学做类似如下的操作: class X { public: X() // 类X的构造函数ctor { _mysql_handler = mysql_init(NULL); } }; // 定义类X的 ...
- OkHttp3的简单使用(一)
一.导入 1)gradle方式: compile 'com.squareup.okhttp3:okhttp:3.8.0'(okhttp 最新版) compile 'com.squareup.okio: ...
- Linux 命令之chcon
chcon命令:修改对象(文件)的安全上下文.比如:用户:角色:类型:安全级别.主要用在selinux中用来更改安全上下文.命令格式: Chcon [OPTIONS…] CONTEXT FILES…. ...
- cinder create volume的流程-scheduler调度
创建 Volume 时,cinder-scheduler 会基于容量.Volume Type 等条件选择出最合适的存储节点,然后让其创建 Volume. 1.cinder-scheduler配置相关项 ...
- 为openstack服务使能debug模式
Most OpenStack services use the same configuration options to enable the debug logging that is also ...