Skip to content

Latest commit

 

History

History
27 lines (18 loc) · 1.02 KB

5.5 StringContext.md

File metadata and controls

27 lines (18 loc) · 1.02 KB

StringContext

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的设计通用。