РЕДАКТИРОВАТЬ: согласно @ комментарию Томми: оценка на самом деле происходит только после использования аргумента expr (это ленивая оценка).
То, что передается, является языковым объектом, а не выражением. Вы в основном вкладываете функцию <-
(с двумя аргументами) в вызов функции st (), и результат вызова <-
передается в st. Как вы можете видеть в ?assignOps
, функция <-
возвращает назначенное значение без вывода сообщений. Как уже сказал @Josh, эта оценка вложенной функции происходит в среде, из которой вызывается функция.
То, что вы делаете, эквивалентно
st(mean(1:10))
Чтобы увидеть разницу, вы можете сделать:
st <- function(expr){
typeof(expr)
}
> st(aa <- 1)
[1] "double"
> st(expression(aa <- 1))
[1] "expression"
Для структуры звонка вы можете сделать:
st <- function(expr){
str(as.list(match.call()))
}
> st(mean(1:10))
List of 2
$ : symbol st
$ expr: language mean(1:10)
> st(aa <- 1)
List of 2
$ : symbol st
$ expr: language aa <- 1