是否可以对转义报价进行模式匹配?
这是我(错误地)尝试的内容:
g :: String -> Bool
g ('\\':'"':_) = True
g _ = False
但结果并不符合我所希望的功能行为。
ghci> g "\""
False
ghci> g "\\\""
True
答案 0 :(得分:5)
字符串与字符串文字之间存在差异。基本上,字符串是一个接一个的字符列表,字符串文字只是一些符号。符号必须“转义”某些字符,否则会导致语法模糊,但它仍然表示字符串没有转义。
对于包含单个字符"\""
的字符串,Haskell表达式"
是表示法。我们需要反斜杠,因为在没有它的情况下编写"""
会使字符串的内容看起来就像一个结束语并打破我们的符号。但字符串本身仍然只有"
。
当你匹配一个字符串值时,你匹配字符串本身,而不是它的符号。这意味着您不必担心字符串中的转义字符,因为它们仅存在于符号级别。因此,要匹配仅包含"
的字符串,您将使用以下模式:
foo ['"'] = ...
如果您尝试使用反斜杠,则会匹配不同的字符串。