callables/parameter_shapes_parens.rb

tests/_examples/callables/parameter_shapes_parens.rb in the metorex repository.

# A parameter written with no name of its own reports the mark it was written
# with, and `**nil` says the method takes no keyword at all.
def anonymous_splat(*); end
def anonymous_keyrest(**); end
def anonymous_block(&); end
def forwarded(...); end
def refuses_keywords(**nil); end
p(method(:anonymous_splat).parameters)
p(method(:anonymous_keyrest).parameters)
p(method(:anonymous_block).parameters)
p(method(:forwarded).parameters)
p(method(:refuses_keywords).parameters)

# A method the interpreter answers itself reports the kinds of its parameters
# and no names, since there is no source to have named them.
p("foo".method(:+).parameters)
p([].method(:pop).parameters)
p("foo".method(:delete!).parameters)

class Holder
  attr_writer :held
end
p(Holder.instance_method(:held=).parameters)

# A subclass of Proc stands for the block it was built with, and its own
# `initialize` runs with the block already attached.
class Counted < Proc
  attr_reader :made
  def initialize
    @made = true
    super
  end
end
counted = Counted.new { "hello" }
p(counted.class == Counted)
p(counted.call)
p(counted.made)

# A callable handed over with `&` is answered as it stands.
p(Counted.new(&counted).equal?(counted))

Output:

[[:rest, :*]]
[[:keyrest, :**]]
[[:block, :&]]
[[:rest, :*], [:keyrest, :**], [:block, :&]]
[[:nokey]]
[[:req]]
[[:rest]]
[[:rest]]
[[:req]]
true
"hello"
true
true