Scala字符串内插器作为提取器
示例
也可以使用Scala的字符串插值功能来创建精细的提取器(模式匹配器),这可能是Scala宏的准引用API中最著名的一种。
考虑n"p0${i0}p1"到newStringContext("p0","p1").n(i0),我们可以通过提供从隐式转换StringContext到具有n定义unapplyorunapplySeq方法的类型属性的类来启用提取器功能,这不足为奇。
例如,考虑以下提取器,该提取器通过从StringContext零件构造正则表达式来提取路径段。然后,我们可以将大部分繁重的工作委托给unapplySeq最终的scala.util.matching.Regex提供的方法:
implicit class PathExtractor(sc: StringContext) {
object path {
def unapplySeq(str: String): Option[Seq[String]] =
sc.parts.map(Regex.quote).mkString("^", "([^/]+)", "$").r.unapplySeq(str)
}
}
"/documentation/scala/1629/string-interpolation" match {
case path"/documentation/${topic}/${id}/${_}" => println(s"$topic, $id")
case _ => ???
}请注意,该path对象还可以定义一个apply方法,以便也可以充当常规内插器。
热门推荐
10 关于健康的祝福语简短
11 海南考试祝福语结婚简短
12 回复姐姐生日祝福语简短
13 周六早晨祝福语简短
14 女儿生日简短祝福语幽默
15 接到英文简短老师祝福语
16 致晚辈生日祝福语简短
17 职场寄语老师祝福语简短
18 迎接新年祝福语简短霸气