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 入住酒店文案祝福语简短