Actions
Bug #20478
closedCircular parameter syntax error rules
Bug #20478:
Circular parameter syntax error rules
Description
I would like to revisit https://bugs.ruby-lang.org/issues/16343.
These cases are syntax errors:
def foo(bar = -> { bar }) end # no lambda parameters
def foo(bar = ->() { bar }) end # no lambda parameters
def foo(bar = baz { bar }) end # no block parameters
def foo(bar = baz { _1 + bar }) end # parameters, but no pipes
def foo(bar = baz { it + bar }) end # parameters, but no pipes
These cases are not syntax errors:
def foo(bar = ->(baz) { bar }) end # lambda parameters
def foo(bar = baz { || bar }) end # no block parameters but empty pipes
def foo(bar = baz { |qux| bar }) end # block parameters
I don't think these rules are very intuitive, and they feel somewhat arbitrary. I would like to suggest we change them to be either:
- Syntax error is raised if the parameter is ever read in its default value at any scope depth
- Syntax error is raised if the parameter is ever read in its default value at depth 0
Either one is fine by me, but gating the syntax error based on the presence of pipes is really confusing.
Actions