rbs
rbs copied to clipboard
Untyped block args
AR::Base.scope
accepts lambdas, but the type of the lambdas is difficult to describe in RBS.
class AR::Base
def self.scope: (Symbol, ^(*untyped, **untyped) -> void) -> void
end
The proc type means it can receive any argument and any keywords, while what we want is a proc is required but the type of its arguments is not checked. So, we want to introduce a new syntax for untyped args.
Possible syntax:
class AR::Base
# ...
def self.scope: (Symbol, ^(...) -> void) -> void
| (Symbol) { (...) -> void } -> void
# ?
def self.scope: (Symbol, ^(?) -> void) -> void
| (Symbol) { (?) -> void } -> void
# untyped
def self.scope: (Symbol, ^untyped -> void) -> void
| (Symbol) { untyped -> void } -> void
end
Any other ones?
Can simply use Proc
for lambdas; this new syntax mainly benefits untyped blocks
untyped -> void
This suggestion is uncomfortably similar to (untyped) -> void
. In fact, it conflicts with the possibility of making arguments’ round parentheses optional (if there’s such a possibility).
I'm going to implement it in (?) -> void
syntax. ...
would be confusing because Ruby has similar syntax with totally different semantics. untyped -> void
is too similar to normal positional argument.