>>>>> Abs Spurdle >>>>> on Thu, 28 Mar 2019 12:26:36 +1300 writes:
>> the prison made by ancient design choices > That prison of ancient design choices isn't so bad. > I have no further comments on object oriented semantics. > However, I'm planning to follow the following design > pattern. > If I set the class of an object, I will append the new > class to the existing class. > #good class (object) = c ("something", class (object) ) #even better ;-) class(object) <- c("something", class(object)) > #bad class (object) = "something" > I encourage others to do the same. Indeed. BUT also tell the thousands of people who do it -- including somewhat famous R package authors -- *NOT* to use things such as if(class(x) == "Date") or switch(class(x), "Date" = ...... , "POSIXct" = ...... , .... ... stop("invalid class: ", class(x))) BUT to always use inherits(x, "....") There may be rare exceptions where using class(x)[1] is good, but I have seen many cases where class(x)[1] was used and the R programmers found it smart they knew that class(x) can be of length more than one, but really their code would fail *exactly* because good R programmers do *prepend* their S3 class extension/specialization to the already existing class. --- ... and then, I do agree with Gabe that (in some cases), using formal (aka "S4") classes is really what one should do in order to get a clean interface. Martin Maechler ETH Zurich and R Core Team ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel