[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

[转] Scala 2.10.0 新特性之字符串插值的更多相关文章

  1. C#6.0新特性之字符串嵌入 String Interpolation

    6.0增加了 字符串嵌入值 的新语法糖. 以前我们做拼接的时候,一般这样写 var s = string.Format("this is a {0} !!!" , class1.p ...

  2. 【c#】6.0与7.0新特性介绍记录

    c#发展史 引用地址:https://www.cnblogs.com/ShaYeBlog/p/3661424.html 6.0新特性 1.字符串拼接优化 语法格式:$”string {参数}” 解释: ...

  3. 背水一战 Windows 10 (1) - C# 6.0 新特性

    [源码下载] 背水一战 Windows 10 (1) - C# 6.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 6.0 新特性 介绍 C# 6.0 的新特性 示例1 ...

  4. Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性

    Hadoop3.0新特性介绍,比Spark快10倍的Hadoop3.0新特性 Apache hadoop 项目组最新消息,hadoop3.x以后将会调整方案架构,将Mapreduce 基于内存+io+ ...

  5. 返璞归真 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 ...

  6. 背水一战 Windows 10 (43) - C# 7.0 新特性

    [源码下载] 背水一战 Windows 10 (43) - C# 7.0 新特性 作者:webabcd 介绍背水一战 Windows 10 之 C# 7.0 新特性 介绍 C# 7.0 的新特性 示例 ...

  7. C# 9.0新特性

    CandidateFeaturesForCSharp9 看到标题,是不是认为我把标题写错了?是的,C# 8.0还未正式发布,在官网它的最新版本还是Preview 5,通往C#9的漫长道路却已经开始.前 ...

  8. fir.im Weekly - 从 iOS 10 SDK 新特性说起

    从 iOS 7 翻天覆地的全新设计,iOS 8 中 Size Classes 的出现,应用扩展,以及 Cloud Kit 的加入,iOS 9 的分屏多任务特性,今年的 WWDC iOS 10 SDK ...

  9. C#发展历程以及C#6.0新特性

    一.C#发展历程 下图是自己整理列出了C#每次重要更新的时间及增加的新特性,对于了解C#这些年的发展历程,对C#的认识更加全面,是有帮助的. 二.C#6.0新特性 1.字符串插值 (String In ...

随机推荐

  1. JSP内置对象与servlet对应关系

    隐式对象 说明 out 转译后对应JspWriter对象,其内部关联一个PringWriter对象 request 转译后对应HttpServletRequest/ServletRequest对象 r ...

  2. select样式调整

    如果select样式如下图:是因为添加了 border-color:#adb7d6; border-width:1px; 样式 删除上面两个样式属性,效果如下图:

  3. Daubechies Wavelet

    The Daubechies wavelets, based on the work of Ingrid Daubechies, are a family of orthogonal wavelets ...

  4. Haar-like feature和Haar wavelet

    Haar-like features are digital image features used in object recognition. They owe their name to the ...

  5. 设计模式05: Prototype 原型模式(创建型模式)

    Prototype 原型模式(创建型模式) 依赖关系的倒置抽象不应该依赖于实现细节,细节应该依赖于抽象.对所有的设计模式都是这样的. -抽象A直接依赖于实现细节b -抽象A依赖于抽象B,实现细节b依赖 ...

  6. 转换汉子首字母类 CreatChinaSpell

    public class CreatChinaSpell { public static string GetChineseFirstChar(string chineseStr) { StringB ...

  7. .NET Core Api 集成 swagger

    废话不多讲 第一步  当然是要通过 NuGet 安装第三方插件 swagger 程序包管理器控制台,安装命令:Install-Package Swashbuckle.AspNetCore -Pre 第 ...

  8. 【大数据之数据仓库】HAWQ versus GreenPlum

    谈到GreenPlum,肯定会有同事说HAWQ!是的,在本系列第一篇选型流水记里,也有提到.因为对HAWQ接触有限,没有深入具体了解,所以很多信息都是来自于博文,人云亦云,我把看过的资料简要整理,希望 ...

  9. 查看进程的pid和ppid

    用个栗子来说明吧from multiprocessing import Processimport time,os def task(): print('%s is running ,parents ...

  10. mybatis学习笔记(五):mybatis 逆向工程

    mybatis学习笔记(五):mybatis 逆向工程 在日常开发中,如果数据库中存在多张表,自己手动创建 多个pojo 类和编写 SQL 语法配置文件,未免太过繁琐,mybatis 也提供了一键式生 ...