From: nobu@... Date: 2021-01-30T09:38:55+00:00 Subject: [ruby-core:102322] [Ruby master Bug#17596] Calling parameters on `new` method results in :rest and -1 arity Issue #17596 has been updated by nobu (Nobuyoshi Nakada). Status changed from Open to Rejected Class method `new` and instance method `initialize` are different things. ---------------------------------------- Bug #17596: Calling parameters on `new` method results in :rest and -1 arity https://bugs.ruby-lang.org/issues/17596#change-90175 * Author: baweaver (Brandon Weaver) * Status: Rejected * Priority: Normal * ruby -v: 3.0.0 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN, 3.0: UNKNOWN ---------------------------------------- Consider the following class: ```ruby class Testing def initialize(a, b, c) # ... end end ``` ...and the following call: ```ruby m = Testing.method(:new) p arity: m.arity, params: m.parameters ``` **Expected** ```ruby { arity: 3, params: [[:req, :a], [:req, :b], [:req, :c]] } ``` **Actual** ```ruby { arity: -1, params: [[:rest]] } ``` This is confusing to me as I would expect to be able to see the parameters of the `new` method like this. The same applies for `initialize. I was experimenting with pattern matching interfaces and dynamically defining class constructor definitions as such: ```ruby def deconstruct method(:new).parameters.map { public_send(_1.last) } end ``` While this case is not 100% safe for all initializers I had expected it to work for testing and was surprised when it did not. I've tested and confirmed this behavior back to 2.5 and tested no further back -- https://bugs.ruby-lang.org/ Unsubscribe: