gpt4 book ai didi

Scala:如何将 `MatchesRegex` 细化与包含反引号的正则表达式(细化库)一起使用?

转载 作者:行者123 更新时间:2023-12-04 15:46:28 27 4
gpt4 key购买 nike

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 以及包含反引号的正则表达式)?

最佳答案

这样做的一种方法是使用 singleton types在 Scala 2.13 或 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|`)"""]

关于Scala:如何将 `MatchesRegex` 细化与包含反引号的正则表达式(细化库)一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55560634/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com