[Rd] specials and ::

Berwin A Turlach berw|n@tur|@ch @end|ng |rom gm@||@com
Mon Aug 26 18:23:42 CEST 2024


G'day Terry,

On Mon, 26 Aug 2024 09:42:10 -0500
"Therneau, Terry M., Ph.D. via R-devel" <r-devel using r-project.org> wrote:

[...]
> I now get "bug reports" from the growing segment that believes one
> should put packagename:: in front of every single instance. 
[...]
> What are other's thoughts?

Not that I want to start a flame war, or say anything controversial,
but IMHO people who want to put packagename:: in front of every
function do not understand S3 method dispatch and are just clutching at
a comfort blanket that sets them up for failure. ;-)

Admittedly, it is now quite a while back that I had the joy of
debugging the following situation (but it happened at least twice in
this millennium if memory serves correctly):

  * Author of package X relies on foo(bar) to be dispatched to
    foo.default().
  * Author of package Y loads a zillion packages, one of which defines
    (and registers) a method foo.bar()
  * User first attaches package X and then package Y (well, order does
    not really matter).
    There is no warning about masked functions (why would there be?) or
    anything else.
  * User calls function in package X that relies on foo(bar) to be
    dispatched to foo.default(), but it is now dispatched to foo.bar().
  * foo.bar() returns something different to foo.default() on an object
    of class bar and, hence, all hell breaks lose in the function in
    package X that used the call foo(bar).

And you can put packagename:: in front of every function call in
package X (and Y and Z &c) until the cows come home and it would not
avoid this problem.

Sorry, but except if the "put package:: in front of every function"
crowd does not also start advocating that generics are not be used but
rather the desired method be called directly, I don't think they can be
taken seriously.

Just my 0.02 (Australian of course).

Cheers,

	Berwin



More information about the R-devel mailing list