gpt4 book ai didi

Scala:如何转义文字中的反引号?

转载 作者:行者123 更新时间:2023-12-01 18:01:45 24 4
gpt4 key购买 nike

Scala 中的文字允许将标识符定义为 answer描述。有没有办法在文字中转义反引号`?做类似的事情:

 val `hello `world` = "hello world"

更新:
其用例之一是使用 refined一些与包含反引号的正则表达式匹配的精炼类型的库,例如:

  import eu.timepit.refined._
import eu.timepit.refined.api.Refined

type MatchesRegexWithBacktick = String Refined MatchesRegex[W.`(a|`)`.T]

最佳答案

这不能用 Scala 编译器按原样完成,但是也许可以使用改变标识符解析方式的编译器插件(也许如果反引号的函数是以某种方式替换为一些晦涩的 unicode 字符)。

Scala SLS 1.1 ,有标识符的词法语法:

op       ::=  opchar {opchar}
varid ::= lower idrest
boundvarid ::= varid
| ‘`’ varid ‘`’
plainid ::= upper idrest
| varid
| op
id ::= plainid
| ‘`’ { charNoBackQuoteOrNewline | UnicodeEscape | charEscapeSeq } ‘`’
idrest ::= {letter | digit} [‘_’ op]

问题是,唯一允许除字母、数字或 _ 之外的任何字符的规则是要求标识符用反引号引起来的规则:

‘`’ { charNoBackQuoteOrNewline | UnicodeEscape | charEscapeSeq } ‘`’

但是,它明确不允许使用 charNoBackQuoteOrNewline 进行反引号,并且如果您认为可以使用 UnicodeEscape 解决它,那也不起作用:

scala> val `hello \u0060world` = "hello world"
<console>:1: error: unclosed quoted identifier
val `hello \u0060world` = "hello world"
^

关于Scala:如何转义文字中的反引号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55539996/

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