Actions
Bug #21382
closedSyntax for arguments in || is more strict than arguments in ()
Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.4.4 (2025-05-14 revision a38531fd3f) +PRISM [x86_64-linux] (seen in older versions too)
Description
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.
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
p lambda { |x, y = (x + 1)| x + y }.call(1)
Updated by matz (Yukihiro Matsumoto) 1 day ago
- 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.
Actions
Like0
Like0