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
даже не согласуется с возвратом вывода «синтаксического анализа». Сначала я понял, что существует разница, когда я тестировал функцию, которая использует parse
в среде тестирования Rstudio, которая вызывает devtools::test
. Там parse(text = expression(print('hey')))
вернул двойной кавычный выход expression(print("hey"))
, который возвращает NULL при его переходе на getParseData
Так вопрос, почему 'выражение (печать («эй»))' изменяет кавычки в двойные кавычки? Я не удивлен, что 'getParseData()' не возвращает информацию из вещей, которые не выполняются через 'parse()' - в ней нет никакой информации о строках и столбцах. Возможно, вы могли бы задать здесь явный вопрос? – MrFlick
Точный вопрос заключается в том, какая разница между выходами. Информация о столбце строки, о которой вы упомянули, например. Как я могу диагностировать его отсутствие или присутствие на выходе (кроме попытки его разобрать), так как визуально два выхода выглядят довольно похожими. – OganM
Если у вас есть 'a <-parse (text =" print ('hey') "); b <-expression (print ('hey')) 'сравнивает их структуру с 'str (a); str (b); 'Вы можете видеть, что они не совпадают. – MrFlick