zoukankan      html  css  js  c++  java
  • Scala 字符串插值器

    Scala 提供了三种创新的字符串插值方法:s,f和raw,使用他们我们可以方便快捷的组合字符串。

    s 字符串插值器

    在任何字符串前加上s,就可以直接在串中使用变量了,在生成字符串的时候会隐式调用其toString方法。

    class Complex(val real: Double, val imaginary: Double) {
    
      override def toString: String = {
        s"Complex(real=$real, imaginary=$imaginary)"
      }
    }
    
    val complex = new Complex(23, -1.3)
    
    println(s"$complex")
    字符串插值器也可以处理任意的表达式:
    
    println(s"1+1=${1 + 1}")
    
    f 插值器

    在任何字符串字面前加上f,就可以生成简单的格式化串,功能相似于其他语言中的printf函数。

    类似于 Java 中的String.format

    val height = 1.9d
    val name = "James"
    println(f"$name%s is $height%.2f meters tall") //James is 1.90 meters tall
    
    raw 插值器

    raw插值器可以保证其内的字符不被编码,如n不会被处理为回车

    println(s"a
    b")  // a回车b
    println(raw"a
    b")  // anb
    
    高级用法

    在 worksheet 中输入如下代码运行

    id"string content"
    

    发现编译器提示:Error:(1, 68) value id is not a member of StringContext

    即:该格式会隐式调用 StringContext 的与前缀插值器同名的方法

    所以我们自定义插值器只需要这样就可以了:

    implicit class JsonHelper(val sc: StringContext) extends AnyVal {
      def json(args: Any*): String = {
        val strings = sc.parts.iterator
        val expressions = args.iterator
        var buf = new StringBuffer(strings.next)
        while (strings.hasNext) {
          buf append expressions.next
          buf append strings.next
        }
        parseJson(buf)
      }
    }
    
    结语

    字符串插值器可以帮助我们快速格式化字符串,s会隐式调用其toString方法,f需要格式模板字符串,raw不会编码字符,我们只需要按需使用即可。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    梦心日记本V2.0终于要完工了
    上班半年大总结
    真有趣
    搞定设计模式1之策略模式
    利用GDI+制作背景颜色淡入淡出效果的按钮
    浏览器之争
    学习自定义控件
    搞定设计模式2之代理模式
    (转)学习asp.net比较完整的流程
    搞定设计模式3之中介者模式
  • 原文地址:https://www.cnblogs.com/binbingg/p/14103090.html
Copyright © 2011-2022 走看看