Bug in print.default: dispatches to global show instead of methods::show

classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

Bug in print.default: dispatches to global show instead of methods::show

Dean Attali
This is related to a problem that was fixed in 2015
https://github.com/wch/r-source/commit/38ea40dcd0353af16d35296ee621338c49ae48c9
The problem then was that auto-printing by typing an object to the console
would search for show() in the globalenv instead of in the methods
namespace.

The problem I would like to report is that it seems that when an S4 object
is printed with print(), a similar issue happens. I do realize that S4
objects should be printed with show() rather than print(), which would
solve the issue, but this still seems like a bug to me.

Example:

library(methods)
show <- function(...) message("hijacked!")
setClass("Test", representation(test = "character"))
test <- new("Test")
print(test)
# hijacked!

        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in print.default: dispatches to global show instead of methods::show

Lionel Henry
Hello,

This is already fixed in r-devel, I think by this commit:

https://github.com/wch/r-source/commit/b59a1526085d1b4375b184d35118c6fd6f003912#diff-12de104c9320556f0e99da345c6fb259 <https://github.com/wch/r-source/commit/b59a1526085d1b4375b184d35118c6fd6f003912#diff-12de104c9320556f0e99da345c6fb259>

Best,
Lionel

> On 21 Feb 2019, at 00:07, Dean Attali <[hidden email]> wrote:
>
> This is related to a problem that was fixed in 2015
> https://github.com/wch/r-source/commit/38ea40dcd0353af16d35296ee621338c49ae48c9
> The problem then was that auto-printing by typing an object to the console
> would search for show() in the globalenv instead of in the methods
> namespace.
>
> The problem I would like to report is that it seems that when an S4 object
> is printed with print(), a similar issue happens. I do realize that S4
> objects should be printed with show() rather than print(), which would
> solve the issue, but this still seems like a bug to me.
>
> Example:
>
> library(methods)
> show <- function(...) message("hijacked!")
> setClass("Test", representation(test = "character"))
> test <- new("Test")
> print(test)
> # hijacked!
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> [hidden email] mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


        [[alternative HTML version deleted]]

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel
Reply | Threaded
Open this post in threaded view
|

Re: Bug in print.default: dispatches to global show instead of methods::show

Martin Maechler
>>>>> Lionel Henry
>>>>>     on Thu, 21 Feb 2019 12:27:11 +0100 writes:

    > Hello,
    > This is already fixed in r-devel, I think by this commit:

    > https://github.com/wch/r-source/commit/b59a1526085d1b4375b184d35118c6fd6f003912#diff-12de104c9320556f0e99da345c6fb259 <https://github.com/wch/r-source/commit/b59a1526085d1b4375b184d35118c6fd6f003912#diff-12de104c9320556f0e99da345c6fb259>

    > Best,
    > Lionel

Yes, indeed... part of patches that Lionel had proposed himself!

Best,
Martin

    >> On 21 Feb 2019, at 00:07, Dean Attali <[hidden email]> wrote:
    >>
    >> This is related to a problem that was fixed in 2015
    >> https://github.com/wch/r-source/commit/38ea40dcd0353af16d35296ee621338c49ae48c9
    >> The problem then was that auto-printing by typing an object to the console
    >> would search for show() in the globalenv instead of in the methods
    >> namespace.
    >>
    >> The problem I would like to report is that it seems that when an S4 object
    >> is printed with print(), a similar issue happens. I do realize that S4
    >> objects should be printed with show() rather than print(), which would
    >> solve the issue, but this still seems like a bug to me.
    >>
    >> Example:
    >>
    >> library(methods)
    >> show <- function(...) message("hijacked!")
    >> setClass("Test", representation(test = "character"))
    >> test <- new("Test")
    >> print(test)
    >> # hijacked!
    >>
    >> [[alternative HTML version deleted]]
    >>
    >> ______________________________________________
    >> [hidden email] mailing list
    >> https://stat.ethz.ch/mailman/listinfo/r-devel


    > [[alternative HTML version deleted]]

    > ______________________________________________
    > [hidden email] mailing list
    > https://stat.ethz.ch/mailman/listinfo/r-devel

______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel