coffeescript - 为什么 Atom 片段需要在其正文中一次使用四个反斜杠才能打印一个反斜杠
问题描述
我在设置片段时才意识到这一点。
'.source':
'shrug':
'prefix': 'shrug'
'body': '¯\\\\_(ツ)_/¯'
为了打印典型的¯\_(ツ)_/¯
耸肩,您需要 4 个反斜杠。使用 2 个反斜杠不会导致任何错误,但不会打印反斜杠。如果你为什么需要 2,我会理解它,但为什么需要 4?
解决方案
atom 片段中的四个反斜杠是由于使用通用CSON表示法(Coffeescript 样式 JSON)的片段。
这篇评论很好地描述了atom-snippets repo中的一个问题
我认为四个反斜杠是有道理的,但在符号上不方便。
它与片段在进入文本缓冲区之前所经历的解释级别有关:
- 该片段在 CSON 文件中声明,这种格式的字符串元素的解析是“反斜杠敏感的”,即 \n 表示换行符,而 \ 表示为 .
然后必须由片段正文解析器解析该片段。解析器使用一个 \ 来转义后面的字符,例如 \ 变为 。所以过程如下:
\ --CSON--> \ --BodyParser--> \
两个反斜杠过去起作用的原因是,代码段正文解析器从未真正处理转义字符(转义情况是显式处理的,而不是以通用方式处理的),这就是我们有 bug #60 的原因。
如果片段以自定义格式存储,则可以使该过程在符号上更加友好。然后我们可以更好地控制它的解析方式,例如在将反斜杠输入正文解析器之前不对其进行解释。
推荐阅读
- ios - 构建成功后应用程序无法在 Xcode 上启动
- powershell - 如何在PowerShell中使用不可导出的证书签署文件?
- server - 通过 gsm/gprs 向服务器发送十六进制数据
- python - 如何检查消息的反应
- android - Kotlin 在运行时请求位置权限问题
- tensorflow - 使用无维度的 tf.where() 和 tf.gather_nd()
- c++ - 是否可以隐藏导出类的实现(包括成员函数和成员数据)?
- php - WordPress:添加自定义样式
TinyMCE 编辑器中的 -tag
- c# - 使用 asp.net core,如何查看(记录)OAuth2 的反向通道通信
- amazon-web-services - 从 Glue Crawler 中排除 Glacier 和 Deep Glacier 存储类型