```{r, child = "setup.Rmd", include = FALSE} ``` The embrace operator `r link("{{")` should be used exclusively with function arguments: ```r fn <- function(arg) { quo(foo({{ arg }})) } fn(1 + 1) #> #> expr: ^foo(^1 + 1) #> env: 0x7ffd89aac518 ``` However you may have noticed that it also works on regular objects: ```r fn <- function(arg) { arg <- force(arg) quo(foo({{ arg }})) } fn(1 + 1) #> #> expr: ^foo(^2) #> env: 0x7ffd8a633398 ``` In that case, `{{` captures the _value_ of the expression instead of a defused expression. That's because only function arguments can be defused. Note that this issue also applies to [enquo()] (on which `{{` is based). # Why is this not an error? Ideally we would have made `{{` on regular objects an error. However this is not possible because in compiled R code it is not always possible to distinguish a regular variable from a function argument. See `r link("topic_embrace_constants")` for more about this.