r - 如何解释项目“反斜杠确实需要加倍”的包装胶水示例
问题描述
如何解释下面的代码,R如何处理和评估它并得到结果“foo”,这对我来说很难理解
`foo}\`` <- "foo"
glue("{
{
'}\\'' # { and } in comments, single quotes
\"}\\\"\" # or double quotes are ignored
`foo}\\`` # as are { in backticks
}
}")
#> foo
解决方案
你不是唯一一个觉得这个例子难以阅读的人。
首先,创建一个名字很有趣的变量,并赋值为“foo”:
`foo}\`` <- "foo"
`foo}\``
[1] "foo"
然后glue
应该计算包含在第一级花括号中的 R 表达式,并且它本身包含在花括号中:
{
'}\\''
\"}\\\"\" # or double quotes are ignored
`foo}\\`` # as are { in backticks
}
因为它是一个字符串,所以使用反斜杠来编写特殊字符。
当 R 解析表达式的每一行时,它会将特殊字符转换为它们的值,并删除#
.
表达式的第一行变为
parse(text = "'}\\''")
expression('}\'')
> eval(expression('}\''))
[1] "}'"
表达式的第二行变为:
> parse(text='\"}\\\"\"')
expression("}\"")
> eval(expression("}\""))
[1] "}\""
最后一行:
> parse(text = "`foo}\\``")
expression(`foo}\``)
> eval(expression(`foo}\``))
[1] "foo"
总而言之,我们有:
{
"}'"
"}\""
"foo"
}
[1] "foo"
推荐阅读
- python - 运行从 brew 安装的 s3cmd 时出错
- c++ - 为什么 Dev-C++ 不允许我使用 std::list?
- c++ - 如何在 Qt 和 C++ 中获得正确的浮点精度?
- javascript - 在数组中使用 Rest 运算符进行解构:将数组元素作为变量以及在 JavaScript 中捕获剩余数组
- c++ - 是否有任何方法允许在 C++ 模板中进行更复杂的类型推断?
- linux - 环境变量是在 Linux 上的 systemd 中通过“set-environment”在内存中还是在磁盘上创建的?
- powershell - 如何在powershell中的变量中分离变量?
- r - Mac OS XR 错误“ld: framework not found CoreFoundation”
- ios - iOS MVC 中的模型应该包含逻辑代码吗?
- macros - 升级 kentico V11 --> V12 后的宏问题