diff --git a/NEWS.md b/NEWS.md index 6022f984..28355d71 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,5 +1,10 @@ # S7 (development version) +* `method<-` now returns an external generic when inside a package and defining + a method for a generic not found inside the package. This ensures that your + package end up with a copy of a generic from another package inside of it + (#364). + * S7 provides a new automatic backward compatibility mechanism to provide a version of `@` that works in R before version 4.3 (#326). diff --git a/R/method-register.R b/R/method-register.R index dbd22c0a..22d4749c 100644 --- a/R/method-register.R +++ b/R/method-register.R @@ -56,7 +56,6 @@ #' bizarro(head(mtcars)) `method<-` <- function(generic, signature, value) { register_method(generic, signature, value, env = parent.frame()) - invisible(generic) } register_method <- function(generic, diff --git a/tests/testthat/test-method-register.R b/tests/testthat/test-method-register.R index c70a66b0..d41d9d5c 100644 --- a/tests/testthat/test-method-register.R +++ b/tests/testthat/test-method-register.R @@ -48,7 +48,7 @@ describe("method registration", { expect_equal(sum(foo2()), "foo") # and doesn't modify generic - expect_equal(sum, base::sum) + expect_equal(sum, new_external_generic("base", "sum", "__S3__")) }) it("can register S7 method for S3 Ops generic", {