• Scala字符穿插值器


    2.10.0版本开始,Scala提供了三种创新的字符串插值方法: s、f 和 raw
    2.11.0版本开始,用于模式匹配patter match

    小结:
    s: 
        s"Hello, $name"   //变量插值
        s"1 + 1 = ${1+1}" //任意表达式插值
    f:
        f"$name%s is $height%2.2f meters tall" //插值后,格式化字符串
    raw:
        raw"a
    b"  //对子面值中的字符不做编码  
    、	等都不编译
    
    自定义插值,用到在学
    

    s字符串插值器

    在任何字符串前加上s,就可以直接在串中使用变量了。

    scala> val name = "James"
    name: String = James
    
    scala> s"Hello, $name"
    res2: String = Hello, James
    

    字符串插值器也可以处理任意的表达式

    任何表达式都可以嵌入到${}中

    scala> println(s"1 + 1 = ${1+1}")
    1 + 1 = 2
    

    f插值器

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

    当使用f插值器的时候,所有的变量引用都应当后跟一个printf-style格式的字符串,如%d、%s.

    scala> val height = 1.9d
    height: Double = 1.9
    
    scala> val name = "James"
    name: String = James
    
    scala> f"$name%s is $height%2.2f meters tall"
    James is 1.90 meters tall
    

    如果试图向只支持int的格式化串传入一个double值,则编译器会报错

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

    ^f插值器利用了Java中的字符串数据格式

    如果在具体变量后没有%,则格式化程序默认使用%s(串型)格式

    这种以%开头的格式在[Formatter javadoc]中有相关描述。

    raw插值器

    除了对子面值中的字符不做编码外,raw插值器与s插值器在功能上是相同的。

    如下是个被处理过的字符串

    scala> s"a
    b"
    res0: String =
    a
    b       //此处解析了
    
    
    scala> raw"a
    b"
    res1: String = a
    b //此处没有解析
    
    

    除了 以上三种字符串插值器外,使用这可以自定义插值器

    高级用法 (先暂搁置,需要再来学)

    在Scala中,所有处理过的字符串字面值都进行了简单转码转换,任何时候编译器遇到一个如下形式的字符串子面值: id"string contect"它都会被转换称一个StringContext实例的call(id)方法。这个方法在隐式范围内仍可用。 只需要简单的建立一个隐式类,给StringContext实例对象添加一个新方法,便可以定义我们自己的 字符串插值器。

    参考https://blog.csdn.net/u013063153/article/details/75599681

  • 相关阅读:
    vue父子组件传值的方式
    定时任务写法
    仅仅为笔记
    consul剔除某个服务
    mybatis批量查询
    一次eureka的事故
    feign的工作原理
    JVM优化
    threadlocal应用
    秋招总结
  • 原文地址:https://www.cnblogs.com/suixingc/p/scala-zi-fu-chuan-cha-zhi-qi.html
Copyright © 2020-2023  润新知