parse
是一个返回表达式的函数。做
parse(text = "print('hey')")
返回
expression(print('hey'))
还可以通过
来识别表达式expression(print('hey'))
稍微出乎意料的是,这是
的输出expression(print("hey"))
请注意双引号的变化。但这不是唯一的区别。将parse(text = "print('hey')")
传递给getParseData
的输出与传递expression(print('hey'))
的输出不同。
getParseData(parse(text = "print('hey')"))
line1 col1 line2 col2 id parent token terminal text
9 1 1 1 12 9 0 expr FALSE
1 1 1 1 5 1 3 SYMBOL_FUNCTION_CALL TRUE print
3 1 1 1 5 3 9 expr FALSE
2 1 6 1 6 2 9 '(' TRUE (
4 1 7 1 11 4 6 STR_CONST TRUE 'hey'
6 1 7 1 11 6 9 expr FALSE
5 1 12 1 12 5 9 ')' TRUE )
而
getParseData(expression(print('hey')))
NULL
我不确定这两项产出之间的区别是什么,我非常想知道。
另一点是(一旦得到答案,可能会被问到一个单独的问题)parse
在返回“可解析”的问题时甚至不一致。输出。当我在Rstudio的调用parse
的测试环境中测试使用devtools::test
的函数时,我首先意识到存在差异。在那里,parse(text = expression(print('hey')))
返回双引号输出expression(print("hey"))
,当传递给getParseData
时返回NULL
答案 0 :(得分:3)
区别仅在于属性。如果从已解析的版本中删除属性,则它们是相同的:
p <- parse(text = "print('hey')")
attributes(p) <- NULL
e <- expression(print('hey'))
identical(p, e)
## [1] TRUE