Project

General

Profile

Actions

Feature #20508

open

Explicit access to *, **, &, and ...

Added by bradgessler (Brad Gessler) about 1 month ago. Updated about 1 month ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:118010]

Description

I find debugging and certain meta-programming tasks challenging because there's no explicit APIs for accessing certain types of arguments in Ruby.

Here's some example code:

def splats(one, *, two: nil, **, &)
  # These work
  p(*)
  p(**)
  # But the block doesn't show a proc.
  p(&)

  # This would show [:one, :two, :_]
  p binding.local_variables
end

splats(:arg, two: true) do
  42
end

I'm not sure how to access the & variable, unless I name it. The same applies to endless ruby methods.

I'd like to see a way to explicitly call bindings for those methods. Something like this (not sure if binding is the right place for it):

def splats(one, *, true: nil, **, &)
  binding.arguments # Returns an array
  binding.keyword_arguments # Returns a hash
  binding.block_argument # Returns a block
end

These methods would give me access to the values used to call the method.

Actions

Also available in: Atom PDF

Like1
Like0Like0Like0