[ruby-core:117839] [Ruby master Bug#20478] Circular parameter syntax error rules
From:
"nobu (Nobuyoshi Nakada) via ruby-core" <ruby-core@...>
Date:
2024-05-12 03:57:19 UTC
List:
ruby-core #117839
Issue #20478 has been updated by nobu (Nobuyoshi Nakada).
Even this should be a syntax error?
```ruby
def foo(bar = ->(baz = bar) {}) end
```
That means it needs to manage the list of yet-unusable variables, not only tracking single variable.
----------------------------------------
Bug #20478: Circular parameter syntax error rules
https://bugs.ruby-lang.org/issues/20478#change-108242
* Author: kddnewton (Kevin Newton)
* Status: Open
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
I would like to revisit https://bugs.ruby-lang.org/issues/16343.
These cases are syntax errors:
```ruby
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:
```ruby
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.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/