On 06/30/2015 11:33 AM, Duncan Murdoch wrote:
On 30/06/2015 5:27 PM, Lorenz, David wrote:
There is something I'm really missing here. The function show is a
standardGeneric function, so the correct way to write it as method like
this:

That describes methods::show.  The problem is that the default print
mechanism isn't calling methods::show() (or base::print() as Luke says),
it's calling show() or print() in the global environment, so the user's
function overrides the generic, and you get the error.

These are two different problems aren't they? I can see that you might want to ensure that base::print() calls methods::show(), but forcing the default print to go to base::print(), rather than whatever print() is first on the search path, would seem like a real change of philosophy. What about all the other base functions that can be overridden by something in the global environment?

Paul

Luke, are you going to look at this, or should I?

Duncan Murdoch


setMethod("show",  "Person", function(object) {

for an object of class "Person" for example.


Dave

On Tue, Jun 30, 2015 at 10:11 AM, <luke-tier...@uiowa.edu> wrote:

Same thing happens with S3 if you redefine print(). I thought that
code was actually calculating the function to call rather than the
symbol to use, but apparently not. Shouldn't be too hard to fix.

luke

On Tue, 30 Jun 2015, Hadley Wickham wrote:

  On Tue, Jun 30, 2015 at 2:20 PM, Duncan Murdoch
<murdoch.dun...@gmail.com> wrote:

On 30/06/2015 1:57 PM, Hadley Wickham wrote:

A slightly simpler formulation of the problem is:

show <- function(...) stop("My show!")
methods::setClass("Person", slots = list(name = "character"))
methods::new("Person", name = "Tom")
#> Error in (function (...)  : My show!


Just to be clear:  the complaint is that the auto-called show() is not
methods::show?  I.e. after

x <- methods::new("Person", name = "Tom")

you would expect

show(x)

to give the error, but not

x

??


Correct - I'd expect print() to always call methods::show(), not
whatever show() is first on the search path.

Hadley



--
Luke Tierney
Ralph E. Wareham Professor of Mathematical Sciences
University of Iowa                  Phone:             319-335-3386
Department of Statistics and        Fax:               319-335-3017
    Actuarial Science
241 Schaeffer Hall                  email:   luke-tier...@uiowa.edu
Iowa City, IA 52242                 WWW:  http://www.stat.uiowa.edu


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


        [[alternative HTML version deleted]]

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel


______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to