首页 > 解决方案 > 如何解释项目“反斜杠确实需要加倍”的包装胶水示例

问题描述

如何解释下面的代码,R如何处理和评估它并得到结果“foo”,这对我来说很难理解

  `foo}\`` <- "foo"
glue("{
      {
        '}\\'' # { and } in comments, single quotes
        \"}\\\"\" # or double quotes are ignored
        `foo}\\`` # as are { in backticks
      }
  }")
#> foo

标签: rr-glue

解决方案


你不是唯一一个觉得这个例子难以阅读的人。
首先,创建一个名字很有趣的变量,并赋值为“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"

推荐阅读