haskell - Haskell中转义的&符号是什么意思?
问题描述
我查看了Haskell 2010报告,注意到一个带有 & 符号的奇怪转义序列:\&
。我找不到这个转义序列应该代表什么的解释。它也可能只位于字符串中。我在 GHCi 中尝试过print "\&"
,它打印一个空字符串。
解决方案
它逃脱了……没有字符。“打破”一些转义序列很有用。例如,我们可能想要表示"\12" ++ "3"
为单个字符串文字。如果我们尝试明显的方法,我们得到
"\123" ==> "{"
但是我们可以使用
"\12\&3"
为预期的结果。
此外,"\SOH"
and"\SO"
都是有效的单个 ASCII 字符转义,因此"\SO" ++ "H"
难以表达为单个文字:我们需要这样做"\SO\&H"
。
标准实例也利用了这种转义技巧Show String
,它必须产生有效的文字语法。我们可以在 GHCi 中看到这一点:
> "\140" ++ "0"
"\140\&0"
> "\SO" ++ "H"
"\SO\&H"
此外,这极大地帮助了旨在生成 Haskell 代码的外部程序(例如,用于元编程)。当为字符串文字发出字符时,外部程序可以\&
在可能不明确的转义(甚至所有转义)的末尾添加,这样程序就不必处理不需要的交互。例如,如果程序现在想要发射\12
,它可以发射\12\&
并且可以自由发射任何东西作为下一个字符。否则,程序应该记住,当发出下一个字符时,它必须在前面加上\&
if 它是一个数字。\&
即使不需要,总是添加更简单:\12\&A
是合法的,并且与 具有相同的含义\12A
。
最后,引用 Haskell 报告中的一句话,解释\&
:
2.6 字符和字符串文字
[...]
与“最大咀嚼”规则一致,字符串中的数字转义字符由所有连续数字组成,并且可以是任意长度。类似地,一个模棱两可的 ASCII 转义码
"\SOH"
被解析为长度为 1 的字符串。转义字符\&
作为 a 提供"null character"
以允许构造字符串,例如"\137\&9"
和"\SO\&H"
(长度均为 2)。因此"\&"
等效于""
并且该字符'\&'
是不允许的。字符的进一步等价在第 6.1.2 节中定义。
推荐阅读
- python - 无法将日期时间转换为纪元毫秒
- ansible - 如何在ansible playbook中比较两个不同主机的输出?
- java - setLayaut 没有回应礼节 Hgap
- compiler-errors - 无法在 rust include 中编译 CRC 库!(concat!(env!("OUT_DIR"), "/crc16_constants.rs"));
- javascript - 在 XMLHttpRequest 中请求 api 时出现错误
- javascript - “castTo TaxonomyField”时更新分类字段会引发异常
- sql - Oracle - SQL 查询拒绝并行运行
- mediawiki - 更改自动电子邮件新帐户
- python - Python:如何从线程函数中获取多个返回值
- makefile - 制作 GNU:从变量中获取字母/字符