-
Notifications
You must be signed in to change notification settings - Fork 209
-
Notifications
You must be signed in to change notification settings - Fork 209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add Support for Non-Symbol Keyowrds #1645
Comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
(Originally posted as a discussion, #1609, I think this is better as an issue)
While working on
Kernel#system
, I came across a limitation of RBS: it only lets you specify symbol keyword arguments, and not any other type.Normal keyword arguments in Ruby are passed via
key: value
, such asgets(chomp: true)
. However, this syntax is actually sugar forgets(:chomp => true)
, and Ruby is capable of accepting other values for keys.Take this contrived example:
Or this slightly-less-contrived example:
There's no real way to typecheck this currently in RBS, as RBS only supports symbols for hash keys. It does have a
**rest
parameter, but that expects symbols as hash keys as well.I propose we add two new pieces of syntax to function declarations:
<literal> => <type>
, such asdef add_one: (0 => Integer)
.**<type> => <type>
, such asdef add_exponentiated_numbers: (**Integer => Integer)
.Notably, the
**
variant isn't equivalent (nor replaces) the current**<type> <variable>
syntax. For example, a simplifiedKernel#system
(which can take integers for hash keys, which correspond to hash descriptors) could be defined as:The text was updated successfully, but these errors were encountered: