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

posted @   BBBone  阅读(357)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示