refined库允许定义与给定regex
匹配的优化,如Readme
所示:
import eu.timepit.refined._
import eu.timepit.refined.string._
import eu.timepit.refined.api.Refined
type MyType = String Refined MatchesRegex[W.`"[0-9]+"`.T]
虽然这很好用,但我们不能用这种方式定义与包含反引号的正则表达式匹配的类型,因为如描述here一样,无法在literal
中转义反引号:
type MyType = String Refined MatchesRegex[W.`"(a|`)"`.T]
// Getting a compile-error:
// ']' expected but ')' found.
那么有没有办法定义这种类型(即MatchesRegex
的正则表达式包含反引号)?
答案 0 :(得分:1)
一种方法是使用Scala 2.13或singleton types中可用的Typelevel Scala。
对于Typelevel Scala,您需要在build.sbt
中添加/替换:
scalaOrganization := "org.typelevel",
scalaVersion := "2.12.4-bin-typelevel-4", // Assuming you are using scala 2.12
您需要添加编译器标志-Yliteral-types
:
scalacOptions := Seq(
..., // Other options
"-Yliteral-types"
)
现在refined
类型可以简单地是:
import eu.timepit.refined._
import eu.timepit.refined.api.Refined
type MyType = String Refined MatchesRegex["""(a|`)"""]