
Issue #21382 has been reported by herwin (Herwin W). ---------------------------------------- Bug #21382: Syntax for arguments in || is more strict than arguments in () https://bugs.ruby-lang.org/issues/21382 * Author: herwin (Herwin W) * Status: Open * 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/