Roughly: once your code depends on that sort of quoting/unquoting you have to place it (and document it) many more places (such as in f02). The following works:
library("dplyr")
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
mtcars %>%
select(mpg)
#> mpg
#> Mazda RX4 21.0
#> Mazda RX4 Wag 21.0
#> ...
f01 <- function(df, select_this) {
df %>%
select({{select_this}})
}
f01(mtcars, mpg)
#> mpg
#> Mazda RX4 21.0
#> Mazda RX4 Wag 21.0
#> ...
f02 <- function(df, select_this) {
f01(df, {{select_this}})
}
f02(mtcars, mpg)
#> mpg
#> Mazda RX4 21.0
#> Mazda RX4 Wag 21.0
#> ...
Honestly I think it is a bit of an argument against the technique and for using explicit lists of columns instead.