[Bioc-devel] issue with .local() hack used in S4 methods
Hervé Pagès
hp@ge@@on@g|thub @end|ng |rom gm@||@com
Sat May 20 11:53:40 CEST 2023
oops, wrong list sorry. I meant to send this to the R-devel list. Done now.
@Martin FWIW I worked around this by keeping the ellipsis in the arg
list of the method:
> setMethod("foo", "raw", function(x, y=-5, ..., z=22) y)
> selectMethod("foo", "raw")
Method Definition:
function (x, ..., z = 22)
{
.local <- function (x, y = -5, ..., z = 22)
y
.local(x, ..., z = z)
}
Signatures:
x
target "raw"
defined "raw"
> foo(raw(1))
[1] -5
Best,
H.
On 5/19/23 14:37, Martin Maechler wrote:
>>>>>> Hervé Pagès
>>>>>> on Fri, 19 May 2023 11:43:50 -0700 writes:
> > Hi,
>
> > Just ran across this:
>
> > foo <- function(x, ..., z=22) z
>
> > setMethod("foo", "character", function(x, y=-5, z=22) y)
> > # Creating a generic function from function ‘foo’ in the global
> > environment
>
> > Then:
>
> > foo("a")
> > # [1] 22
>
> > Should return -5, not 22.
>
> > That's because the call to .local() used internally by the foo() method
> > does not name the arguments placed after the ellipsis:
>
> >> selectMethod("foo", "character")
> > Method Definition:
>
> > function (x, ..., z = 22)
> > {
> > .local <- function (x, y = 5, z = 22)
> > y
> > .local(x, ..., z) <--- should be .local(x, ..., z=z)
> > }
>
> > Thanks,
> > H.
>
>
> >> sessionInfo()
> > R version 4.3.0 (2023-04-21)
> [...............]
>
> I can confirm this *bug* (also in R 4.2.z, R 4.1.z, R 3.6.3).
>
> One might be tempted to say this falls into the
> "Doctor, it hurts when I do this --- then, don't do that!"
> category.
>
> Maybe a simple way to fix the would be to forbid the '...'
> in S4 generics and methods apart from at the end,
> or then make sure that after the ... in the .local() call, all
> argument must be named {{as you suggest above}}.
>
> Could you file a bug at R's bugzilla?
> {I know we have too many open bugs there, notably related to S4,
> but still you'd do a service to the R community.}
>
> Best,
> Martin
>
>
>
>
> > --
> > Hervé Pagès
>
> > Bioconductor Core Team
> > hpages.on.github using gmail.com
>
> > _______________________________________________
> > Bioc-devel using r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/bioc-devel
--
Hervé Pagès
Bioconductor Core Team
hpages.on.github using gmail.com
More information about the Bioc-devel
mailing list