如何解释下面的代码,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"