前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Scala Essentials: 字符串内插值

Scala Essentials: 字符串内插值

作者头像
Albert陈凯
发布2018-04-04 15:09:11
8520
发布2018-04-04 15:09:11
举报
文章被收录于专栏:Albert陈凯Albert陈凯

字符串插值 Scala是一门高度可扩展性的程序设计语言,保持微小的内核,但具有无穷大的扩展能力。例如,「字符串内插」功能,Scala语言并不是原生地支持该特性,而是通过类库的扩展来实现的。

println(s"$name is $age years old.") 相对于Ruby的字符串内插功能,Scala在字符串前加入s的前缀,显得不是那么优雅,但如此的设计换取了良好的可扩展性:

支持其他形式的字符串的内插功能,例如s, f, raw; 支持用户自定义字符串的内插功能; 剖析本质

代码语言:javascript
复制
package scala
case class StringContext(parts: String*) {
  def s(args: Any*): String = ???
  def f(args: Any*): String = ???
  def raw(args: Any*): String = ???
}

s其本质仅仅是一个函数而已。

f""

f函数支持格式化的字符串内插功能;

代码语言:javascript
复制
f"$name%s is ${height}%2.2f meters tail"
//等价于
"%s is %2.2f meters tail".format(name, height)

但是,String.format可读性相对于f较差。

raw

raw表示在不转义字符场景下的字符串内插,类似于"""string"""三引号的字符串常量。

代码语言:javascript
复制
raw"a\nb"
//等价于
"""a\nb"""

自定义插值函数

可以自定义字符串的内插的定义,彻底体现了Scala可扩展性的哲学思维。例如,定义JSON的字符串表示。

代码语言:javascript
复制
implicit class JsonHelper(val sc: StringContext) extends AnyVal {
  def json(args: Any*): JSONObject = ???
}
val conf = json"{ a: $a }"
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.02 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • f""
  • raw
  • 自定义插值函数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档