Scala 字符串插值的简单介绍

news/2025/2/28 19:00:38/

在 Scala 中,字符串插值是通过在字符串前添加特定前缀实现的,主要有三种标准插值器:sf 和 raw。它们的核心用法如下:


1. s 插值器(简单插值)

  • 作用:将变量或表达式直接嵌入字符串。
  • 语法s"..." + $变量名 或 ${表达式}
  • 示例

    scala复制代码

    val name = "Alice"
    val age = 30
    val str = s"Name: $name, Age: $age" // 直接引用变量
    // 输出:Name: Alice, Age: 30val calc = s"Next year: ${age + 1}" // 表达式需用 {} 包裹
    // 输出:Next year: 31

2. f 插值器(格式化插值)

  • 作用:支持类似 printf 的格式化输出,类型安全。
  • 语法f"..." + %格式化符
  • 示例

    scala复制代码

    val height = 1.75
    val str = f"Height: $height%.2f meters" // 保留两位小数
    // 输出:Height: 1.75 metersval num = 10
    val padded = f"Number: $num%04d" // 补零到4位
    // 输出:Number: 0010
  • 注意:格式化符需与变量类型匹配(如 %d 用于整数,%s 用于字符串)。

3. raw 插值器(原始字符串)

  • 作用:禁用转义字符处理,直接输出原始内容。
  • 语法raw"..."
  • 示例

    scala复制代码

    val path = raw"C:\Users\Alice\note.txt" // \n 不会被转义为换行
    // 输出:C:\Users\Alice\note.txt

4. 自定义插值器(高级用法)

可通过实现 StringContext 的方法自定义插值器,例如:

scala复制代码

implicit class JsonInterpolator(val sc: StringContext) extends AnyVal {def json(args: Any*): String = {// 自定义逻辑(如生成 JSON)s"JSON: ${args.mkString}"}
}val key = "name"
val value = "Bob"
val jsonStr = json"key=$key, value=$value" // 自定义插值器
// 输出可能:JSON: key=name, value=Bob

注意事项

  1. 前缀必须紧接字符串s"..." 不能写成 s "..."(空格会报错)。
  2. 表达式需用 {} 包裹:复杂表达式如 ${user.getName.toUpperCase}
  3. 类型安全f 插值器会检查格式化符与变量类型是否匹配。
  4. 隐式转换:插值器本质是通过隐式类扩展 StringContext 实现的。

对比其他语言

  • 类似 Python 的 f-stringf"{name}" vs Scala 的 s"$name"
  • 类似 JavaScript 模板字符串${name} vs Scala 的 ${name}


http://www.ppmy.cn/news/1575571.html

相关文章

Python生成器250224

是由函数与yield关键字创造出来的写法,在特定情况下,可以帮助我们节省内存执行一个生成器函数,函数体代码不会运行,会返回一个生成器对象要想执行函数体内容,就需要使用这个生成器对象来执行 def func():print(123)yi…

Unity学习笔记之——ugui的性能优化

在Unity中UI优化的核心问题就是重绘和批处理之间的平衡 一、Canvas优化要点 1.优化原因: (1)Unity为了性能优化,会合并Canvas下的所有元素; (2)如果把所有面板放到一个Canvas下,会…

蓝桥杯 5.字符串

蓝桥杯 5.字符串 文章目录 蓝桥杯 5.字符串KMP&字符串哈希Manacher编程138-148字典树基础01Trie编程149-155 KMP&字符串哈希 KMP算法 字符串匹配算法, 用于匹配**模式串P(短)和文本串S(长)**中出现的所有位置, 例如, S “ababac”, P “aba”, 那么出现的所有位置就…

Imagination通过最新的D系列GPU IP将效率提升至新高度

Imagination DXTP GPU IP在加速移动设备和其他电力受限设备上的图形和计算工作负载时,能够延长电池续航时间。 英国伦敦 – 2025年2月25日 – 今日,Imagination Technologies(“Imagination”)宣布推出其最新的GPU IP——Imagina…

NTS库学习,找bug中......

基础知识 Coordinate: 表示一个二维坐标点,包括 X 和 Y 坐标值。 CoordinateSequence: 由一系列 Coordinate 对象组成的序列,可以表示线、多边形等几何对象的顶点。 CoordinateFilter: 用于对几何对象的坐标进行过滤或修改的接口。 Geometry: 表示一个几…

QT 中的元对象系统(二):元对象实现原理QMetaObject

目录 1.元对象系统的构成 2.QObject和QMetaObject的关系 3.Qt 元对象模型QMetaObject 3.1.基本信息 3.2.类信息classinfo 3.3.类构造函数constructor 3.4.枚举信息 enumerator 3.5.类方法method 3.6.类属性peoproty 4.MOS(Meta Object System)示例 5.总结 1.元对象系…

端口映射/内网穿透方式及问题解决:warning: remote port forwarding failed for listen port

文章目录 需求:A机器是内网机器,B机器是公网服务器,想要从公网,访问A机器的端口方式:端口映射,内网穿透,使用ssh打洞端口:遇到问题:命令执行成功,但是端口转发…

SSL 证书是 SSL 协议实现安全通信的必要组成部分

SSL证书和SSL/TLS协议有着密切的关系,但它们本质上是不同的概念。下面是两者的区别和它们之间的关系的表格: 属性SSL/TLS 协议SSL证书英文全称SSL(Secure Sockets Layer),TLS(Transport Layer Security&am…