添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
个性的韭菜  ·  More problems with ...·  4 天前    · 
非常酷的啄木鸟  ·  Serializing / ...·  4 天前    · 
深沉的烈马  ·  TypeScript: ...·  3 天前    · 
坚强的遥控器  ·  Dynamics Community ...·  2 天前    · 
活泼的伤疤  ·  Strange behavior of ...·  19 小时前    · 
谈吐大方的镜子  ·  redux subscribe ...·  1 年前    · 
睿智的打火机  ·  Getting Started | ...·  1 年前    · 
精彩文章免费看

scala字符串插入

scala的字符串插入,与java语言的 String.format(String str, Object... val) 有类似之处,都是最终用字符串变量去替代字符串中的 变量占位符 。Scala中主要有 s , f , raw 三种字符串插值用法,另外还有一些高级用法,本文主要参考官网 字符串插入

val name = "James"
println(s"Hello, $name")  // Hello, James
println(s"1 + 1 = ${1 + 1}") // 1+1 =2
val height = 1.9d
val name = "James"
println(f"$name%s is $height%2.2f meters tall")  // James is 1.90 meters tall

错误方式:类型转化错误

val height: Double = 1.9d
scala> f"$height%4d"
<console>:9: error: type mismatch;
 found   : Double
 required: Int
           f"$height%4d"

raw用法

scala> s"a\nb"
res0: String =
scala> raw"a\nb"
res1: String = a\nb

可以看出raw用法对转义字符不做任何特别处理

如果你遇到下面这种字符串表达:

id"string content"

scala会将其转换为StringContext实例上的一个方法(id)的调用,方法(id)的实际输入参数是字符串 string content。看下面的例子

implicit class JsonHelper(val sc: StringContext) extends AnyVal {
  def json(args: Any*): JSONObject = sys.error("TODO - IMPLEMENT")
def giveMeSomeJson(x: JSONObject): Unit = ...
giveMeSomeJson(json"{ name: $name, id: $id }")

当scala编译器遇到json"{ name: $name, id: $id }"时,会如下处理

new StringContext("{ name: ", ", id: ", " }").json(name, id)

隐式类的存在,使得json方法有效,所以接着会改写成

new JsonHelper(new StringContext("{ name: ", ", id: ", " }")).json(name, id)
最后编辑于:2017-12-11 08:07