Project

General

Profile

Actions

Bug #21382

closed

Syntax for arguments in || is more strict than arguments in ()

Added by herwin (Herwin W) 10 days ago. Updated 3 days ago.

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)
[ruby-core:<unknown>]

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) 3 days 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

Also available in: Atom PDF

Like0
Like0