2

在 Racket 中,您必须转义字符串中的反斜杠,因此 Windows 路径和正则表达式变得冗长。

例如,正则表达式(.*)\1可以用字符串"(.*)\\1"或正则表达式常量表示#rx"(.*)\\1";必须对正则表达式中的 \ 进行转义以将其包含在字符串或正则表达式常量中。[来源:正则表达式语法]

在许多语言中,例如 Perl 和 Ruby 正则表达式在语法上是受支持/\([a-z]+\)/的,而在其他语言中则有可选的原始字符串,例如在 Python 中r"\([a-z]+\)"。似乎 Racket 不支持原始字符串,您不需要在本地转义反斜杠。有什么方法可以实现它们,第三方库,提案等等?

也可以看看:

4

1 回答 1

6

正如克里斯提到的,自定义阅读器可以做到这一点。

Racket 已经提供的可以使用的阅读器示例是at-exp

#lang at-exp racket

@~a{C:\Windows\win.ini}
;; "C:\\Windows\\win.ini"

@~a{This is a string
    with newlines.}
;; "This is a\nstring with newlines."

我喜欢使用~a它,因为它可以将任何内容转换为字符串,并且只需键入两个字符。

但是,对于您的正则表达式示例,您不能使用~aor #rx。相反,您应该使用regexp

@regexp{(.*)\1}
;; #rx"(.*)\\1"

在所有这些示例中,基本上@function{string}都被解读为--。您可以在和 Scribble(function "string")的文档中了解一些细微差别。at-exp

于 2014-03-23T20:27:08.480 回答