From h.wickham at gmail.com  Tue Jun 30 13:57:23 2015
From: h.wickham at gmail.com (Hadley Wickham)
Date: Tue, 30 Jun 2015 13:57:23 +0200
Subject: [Rd] Defining a `show` function breaks the print-ing of S4
 object -- bug or expected?
In-Reply-To: <CA+j8Z+=233OjOe00qV+5MdF9kkkVrWh4wfmUeAzwb4Q12DSxew@mail.gmail.com>
References: <CA+j8Z+=233OjOe00qV+5MdF9kkkVrWh4wfmUeAzwb4Q12DSxew@mail.gmail.com>
Message-ID: <CABdHhvEVbdbNKUswtqENgfy1L4yQDOEEKyO--ft+x7f2M+ALPg@mail.gmail.com>

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!

Hadley

On Tue, Jun 30, 2015 at 9:02 AM, Dean Attali <daattali at gmail.com> wrote:
> Hi r-devel
>
> If you define a function named `show` or attach a package with an exported
> `show` function, then printing/vieweing S4 objects breaks. This is probably
> because the `print` function calls `show`, which is now masked.
>
> Example:
>
> show <- function() {}
>> setClass("Person", slots = list(name = "character"))
>> tom <- new("Person", name = "Tom")
>> tom # error
>> methods::show(tom) # works
>
>
> The error was a surprise to me because  I was under the assumption that
> `show` would be namespaced and therefore should not break.
> I'm wondering if this is intended behaviour, or if this is a problem.  My
> intuition, and Hadley agreed on Twitter, is that defining a `show` method
> should not have such a grave effect on printing S4 objects.
>
> Thanks
>
> ---
> http://deanattali.com
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



-- 
http://had.co.nz/



[Rd] Defining a `show` function breaks the print-ing of S4 object -- bug or expected?
Hadley Wickham