A strict list is essentially a normal list()
but it does not
allow partial matching with $
.
strict_list(...)
as_strict_list(x)
# S3 method for class 'xfun_strict_list'
x$name
# S3 method for class 'xfun_strict_list'
print(x, ...)
Both strict_list()
and as_strict_list()
return a list
with the class xfun_strict_list
. Whereas as_strict_list()
attempts to coerce its argument x
to a list if necessary,
strict_list()
just wraps its argument ...
in a list, i.e., it
will add another list level regardless if ...
already is of type
list.
To me, partial matching is often more annoying and surprising than
convenient. It can lead to bugs that are very hard to discover, and I have
been bitten by it many times. When I write x$name
, I always mean
precisely name
. You should use a modern code editor to autocomplete
the name
if it is too long to type, instead of using partial names.
library(xfun)
(z = strict_list(aaa = "I am aaa", b = 1:5))
#> $aaa
#> [1] "I am aaa"
#>
#> $b
#> [1] 1 2 3 4 5
#>
z$a # NULL!
#> NULL
z$aaa # I am aaa
#> [1] "I am aaa"
z$b
#> [1] 1 2 3 4 5
z$c = "create a new element"
z2 = unclass(z) # a normal list
z2$a # partial matching
#> [1] "I am aaa"
z3 = as_strict_list(z2) # a strict list again
z3$a # NULL again!
#> NULL