[Rd] Problems with S4 methods dispatching on `...` (aka dotsMethods)

Michael Lawrence lawrence.michael at gene.com
Mon Aug 7 19:27:45 CEST 2017


I ported that over.

On Tue, Aug 1, 2017 at 5:50 AM, Andrzej Oleś <andrzej.oles at gmail.com> wrote:

> Thank you Michael for updating the 3.4 branch, the `callNextMethod()` now
> works for `...` methods as expected. However, I'm still missing your other
> patch fixing the handling of arguments in `...` methods. It would be really
> great if this bugfix could be integrated into the 3.4 branch as well, such
> that the following code doesn't result in an error.
>
> Cheers,
> Andrzej
>
>
>     f = function(x, ..., a = b) {
>       b = "missing 'a'"
>       print(a)
>     }
>
>     f()
>     ## [1] missing 'a'
>
>     f(a = 1)
>     ## [1] 1
>
>     setGeneric("f", signature = "x")
>
>     # works as the non-generic version
>     f()
>     ## [1] missing 'a'
>
>     setGeneric("f", signature = "...")
>
>     # unexpectedly fails to find 'b'
>     f()
>     ## Error in print(a) : object 'b' not found
>
>
> On Fri, Jul 28, 2017 at 9:15 PM, Michael Lawrence <
> lawrence.michael at gene.com> wrote:
>
>> I pushed the patch to the 3.4 branch. Feel free to test.
>>
>> Michael
>>
>> On Wed, Jul 26, 2017 at 4:02 AM, Andrzej Oleś <andrzej.oles at gmail.com>
>> wrote:
>> > Hi Michael,
>> >
>> > it seems that your patch to S4 generics dispatching on `...` is still
>> > available only in R-devel, and was not included in the minor R-3.4.1
>> > release. I was wondering what is the policy of incorporating bug fixes
>> from
>> > the devel branch into release, and whether there is any chance that the
>> > broken `...` dispatch is fixed before R-3.5.0?
>> >
>> > Cheers,
>> > Andrzej
>> >
>> >
>> > On Tue, Apr 25, 2017 at 4:15 PM, Andrzej Oleś <andrzej.oles at gmail.com>
>> > wrote:
>> >>
>> >> You're right, I must have mixed up my R versions when running the
>> example,
>> >> as the problem seems to be resolved in R-devel.
>> >>
>> >> Sorry for the noise and thanks again for fixing this.
>> >>
>> >> Andrzej
>> >>
>> >> On Tue, Apr 25, 2017 at 3:55 PM, Michael Lawrence
>> >> <lawrence.michael at gene.com> wrote:
>> >>>
>> >>> I attempted to fix it, and that example seems to work for me. It's
>> >>> also a (passing) regression test in R. Are you sure you're using a new
>> >>> enough R-devel?
>> >>>
>> >>>
>> >>> On Tue, Apr 25, 2017 at 2:34 AM, Andrzej Oleś <andrzej.oles at gmail.com
>> >
>> >>> wrote:
>> >>> > Hi Michael,
>> >>> >
>> >>> > thanks again for your patch! I've tested it and I'm happy to confirm
>> >>> > that
>> >>> > `callNextMethod()` works with methods dispatching on `...`.
>> >>> >
>> >>> > However, the second issue I reported still seems to be unresolved.
>> >>> > Consider
>> >>> > the following toy example, where the `f()` calls differ in result
>> >>> > depending
>> >>> > on whether the dispatch happens on a formal argument or the `...`
>> >>> > argument.
>> >>> >
>> >>> >
>> >>> >     f = function(x, ..., a = b) {
>> >>> >       b = "missing 'a'"
>> >>> >       print(a)
>> >>> >     }
>> >>> >
>> >>> >     f()
>> >>> >     ## [1] missing 'a'
>> >>> >
>> >>> >     f(a = 1)
>> >>> >     ## [1] 1
>> >>> >
>> >>> >     setGeneric("f", signature = "x")
>> >>> >
>> >>> >     # works as the non-generic version
>> >>> >     f()
>> >>> >     ## [1] missing 'a'
>> >>> >
>> >>> >     setGeneric("f", signature = "...")
>> >>> >
>> >>> >     # unexpectedly fails to find 'b'
>> >>> >     f()
>> >>> >     ## Error in print(a) : object 'b' not found
>> >>> >
>> >>> >
>> >>> > Any chances of fixing this?
>> >>> >
>> >>> > Cheers,
>> >>> > Andrzej
>> >>> >
>> >>> >
>> >>> >
>> >>> > On Fri, Apr 21, 2017 at 11:40 AM, Andrzej Oleś <
>> andrzej.oles at gmail.com>
>> >>> > wrote:
>> >>> >>
>> >>> >> Great, thanks Michael for you quick response!
>> >>> >>
>> >>> >> I started off with a question on SO because I was not sure whether
>> >>> >> this
>> >>> >> was an actual bug or I was just missing something obvious. I'm
>> looking
>> >>> >> forward to the patch.
>> >>> >>
>> >>> >> Cheers,
>> >>> >> Andrzej
>> >>> >>
>> >>> >>
>> >>> >> On Thu, Apr 20, 2017 at 10:28 PM, Michael Lawrence
>> >>> >> <lawrence.michael at gene.com> wrote:
>> >>> >>>
>> >>> >>> Thanks for pointing out these issues. I have a fix that I will
>> commit
>> >>> >>> soon.
>> >>> >>>
>> >>> >>> Btw, I would never have seen the post on Stack Overflow. It's
>> best to
>> >>> >>> report bugs on the bugzilla.
>> >>> >>>
>> >>> >>> Michael
>> >>> >>>
>> >>> >>> On Thu, Apr 20, 2017 at 8:30 AM, Andrzej Oleś
>> >>> >>> <andrzej.oles at gmail.com>
>> >>> >>> wrote:
>> >>> >>> > Hi all,
>> >>> >>> >
>> >>> >>> > I recently encountered some unexpected behavior with S4 generics
>> >>> >>> > dispatching on `...`, which I described in
>> >>> >>> >
>> >>> >>> >
>> >>> >>> > http://stackoverflow.com/questions/43499203/use-callnextmeth
>> od-with-dotsmethods
>> >>> >>> >
>> >>> >>> > TL;DR: `callNextMethod()` doesn't work in methods dispatching on
>> >>> >>> > `...`,
>> >>> >>> > and
>> >>> >>> > arguments of such methods are resolved differently than the
>> >>> >>> > arguments
>> >>> >>> > of
>> >>> >>> > methods dispatching on formal arguments.
>> >>> >>> >
>> >>> >>> > Could this indicate a potential problem with the implementation
>> of
>> >>> >>> > the
>> >>> >>> > `...` dispatch?
>> >>> >>> >
>> >>> >>> > Cheers,
>> >>> >>> > Andrzej
>> >>> >>> >
>> >>> >>> >         [[alternative HTML version deleted]]
>> >>> >>> >
>> >>> >>> > ______________________________________________
>> >>> >>> > R-devel at r-project.org mailing list
>> >>> >>> > https://stat.ethz.ch/mailman/listinfo/r-devel
>> >>> >>
>> >>> >>
>> >>> >
>> >>
>> >>
>> >
>>
>
>

	[[alternative HTML version deleted]]



More information about the R-devel mailing list