From: keystonelemur@... Date: 2021-01-30T09:03:13+00:00 Subject: [ruby-core:102321] [Ruby master Bug#17596] Calling parameters on `new` method results in :rest and -1 arity Issue #17596 has been updated by baweaver (Brandon Weaver). Ah, this makes some sense, and I'd just seen [something similar on Twitter](https://twitter.com/pixeltrix/status/1355439913752260609). I would think that one of `initialize` or `new` would not do that instead of forwarding. ---------------------------------------- Bug #17596: Calling parameters on `new` method results in :rest and -1 arity https://bugs.ruby-lang.org/issues/17596#change-90174 * Author: baweaver (Brandon Weaver) * Status: Open * 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: