Project

General

Profile

Actions

Bug #17596

closed

Calling parameters on `new` method results in :rest and -1 arity

Added by baweaver (Brandon Weaver) about 3 years ago. Updated about 3 years ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:102318]

Description

Consider the following class:

class Testing
  def initialize(a, b, c)
    # ...
  end
end

...and the following call:

m = Testing.method(:new)
p arity: m.arity, params: m.parameters

Expected

{ arity: 3, params: [[:req, :a], [:req, :b], [:req, :c]] }

Actual

{ 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:

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

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0