File: strict_list.Rd

package info (click to toggle)
r-cran-xfun 0.20-1
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 680 kB
  • sloc: ansic: 242; sh: 22; makefile: 2
file content (61 lines) | stat: -rw-r--r-- 1,803 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
% Generated by roxygen2: do not edit by hand
% Please edit documentation in R/data-structure.R
\name{strict_list}
\alias{strict_list}
\alias{as_strict_list}
\alias{$.xfun_strict_list}
\alias{print.xfun_strict_list}
\title{Strict lists}
\usage{
strict_list(...)

as_strict_list(x)

\method{$}{xfun_strict_list}(x, name)

\method{print}{xfun_strict_list}(x, ...)
}
\arguments{
\item{...}{Objects (list elements), possibly named. Ignored in the
\code{print()} method.}

\item{x}{For \code{as_strict_list()}, the object to be coerced to a strict
  list.

  For \code{print()}, a strict list.}

\item{name}{The name (a character string) of the list element.}
}
\value{
Both \code{strict_list()} and \code{as_strict_list()} return a list
  with the class \code{xfun_strict_list}. Whereas \code{as_strict_list()}
  attempts to coerce its argument \code{x} to a list if necessary,
  \code{strict_list()} just wraps its argument \code{...} in a list, i.e., it
  will add another list level regardless if \code{...} already is of type
  list.
}
\description{
A strict list is essentially a normal \code{\link{list}()} but it does not
allow partial matching with \code{$}.
}
\details{
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 \code{x$name}, I always mean
precisely \code{name}. You should use a modern code editor to autocomplete
the \code{name} if it is too long to type, instead of using partial names.
}
\examples{
library(xfun)
(z = strict_list(aaa = "I am aaa", b = 1:5))
z$a  # NULL!
z$aaa  # I am aaa
z$b
z$c = "create a new element"

z2 = unclass(z)  # a normal list
z2$a  # partial matching

z3 = as_strict_list(z2)  # a strict list again
z3$a  # NULL again!
}