[ruby-core:122434] [Ruby Bug#21382] Syntax for arguments in || is more strict than arguments in ()
From:
"matz (Yukihiro Matsumoto) via ruby-core" <ruby-core@...>
Date:
2025-06-05 08:40:12 UTC
List:
ruby-core #122434
Issue #21382 has been updated by matz (Yukihiro Matsumoto).
Status changed from Open to Closed
Unfortunately, `|` is a binary-or operator too. So we have to be more strict to avoid ambiguity and syntax conflict.
Matz.
----------------------------------------
Bug #21382: Syntax for arguments in || is more strict than arguments in ()
https://bugs.ruby-lang.org/issues/21382#change-113615
* Author: herwin (Herwin W)
* Status: Closed
* ruby -v: ruby 3.4.4 (2025-05-14 revision a38531fd3f) +PRISM [x86_64-linux] (seen in older versions too)
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
```ruby
p ->(x, y = x + 1) { x + y }.call(1)
```
This works fine, this gives `y` the value of `x + 1` and prints `3`. The same thing can be used in method definitions.
```ruby
p lambda { |x, y = x + 1| x + y }.call(1)
```
This is the same thing, but results in a parse error (both prism and parse.y):
```
# Prism:
p lambda { |x, y = x + 1| x + y }.call(1)
^ expected the block parameters to end with `|`
^ unexpected '+', ignoring it
# Parse.y:
syntax error, unexpected '+', expecting '|'
```
It works if the default is a single statement (wrapping it in parentheses), so it looks to be purely a grammatical issue
```ruby
p lambda { |x, y = (x + 1)| x + y }.call(1)
```
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- [email protected]
To unsubscribe send an email to [email protected]
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/