Kotlin提供的字符串模板是一个非常实用的功能,可以在字符串内部嵌入变量,其避免了像Java一样的大段字符串拼接:
// kotlin
val name = "Kotlin"
println("Welcome to $name")
Scala3也提供了类似的功能:
// scala
val name = "Scala"
println(s"Welcome to $name")
语法看起来非常相似,唯一不同的是,Scala3的版本多了一个s
前缀,这个前缀是什么意思呢?
实际上,Kotlin的字符串模板是StringBuilder
的语法糖,是调用嵌入变量的toString()
实现的,如果我们想实现不同的嵌入规则,那么Kotlin就无法办到了。
而Scala中有一个特殊的类StringContext
,用于处理字符串模板,而s
只是这个类中提供的一个方法名而已。
也就是说,如果我们对StringContext
添加“扩展方法”,那么就可以实现不同的嵌入规则。
虽然字符串模板只是一个小功能,也可以看出来,Scala3的语法远比Kotlin的设计通用。