在Racket中,你必须在字符串中转义反斜杠,因此Windows路径和正则表达式变得冗长。
例如,正则表达式
(.*)\1
可以用字符串"(.*)\\1"
或正则表达式常量#rx"(.*)\\1"
表示;必须转义正则表达式中的\才能将其包含在字符串或regexp常量中。 [来源:Regexp Syntax]
在许多语言中,例如Perl和Ruby正则表达式在语法上/\([a-z]+\)/
受支持,在其他语言中有可选的raw strings,就像在Python r"\([a-z]+\)"
中一样。似乎Racket不支持原始字符串,在本地你不需要逃避反斜杠。有没有任何方法可以实现它们,第三方库,提案等等?
另见:
答案 0 :(得分: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
,因为它会将任何内容转换为字符串,并且只需输入两个字符。
但是,对于正则表达式示例,您无法使用~a
或#rx
。相反,您应该使用regexp
:
@regexp{(.*)\1}
;; #rx"(.*)\\1"
在所有这些示例中,@function{string}
基本上都被视为(function "string")
。您可以在at-exp
和Scribble的文档中阅读一些细微差别。