This is equivalent to base::typeof() with a few differences that
make dispatching easier:
The type of one-sided formulas is "quote".
The type of character vectors of length 1 is "string".
The type of special and builtin functions is "primitive".
type_of(x)
| x | An R object. |
|---|
type_of() is an experimental function. Expect API changes.
type_of(10L)#> Warning: `type_of()` is deprecated as of rlang 0.4.0. #> Please use `typeof()` or your own version instead. #> This warning is displayed once per session.#> [1] "integer"#> [1] "formula"type_of(~10L)#> [1] "formula"#> [1] "language"# Strings are treated as a new base type: type_of(letters)#> [1] "character"type_of(letters[[1]])#> [1] "string"# This is a bit inconsistent with the core language tenet that data # types are vectors. However, treating strings as a different # scalar type is quite helpful for switching on function inputs # since so many arguments expect strings: switch_type("foo", character = abort("vector!"), string = "result")#> [1] "result"# Special and builtin primitives are both treated as primitives. # That's because it is often irrelevant which type of primitive an # input is: typeof(list)#> [1] "builtin"typeof(`$`)#> [1] "special"type_of(list)#> [1] "primitive"type_of(`$`)#> [1] "primitive"