Project

General

Profile

Actions

Feature #16182

closed

Should `expr in a, b, c` be allowed or not?

Added by mame (Yusuke Endoh) about 2 years ago. Updated 2 months ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:95098]

Description

In #15865, a new syntax <expr> in <pattern> was introduced. By using this, we can write:

json = { foo: 1, bar: 2}

if json in { foo:, bar: }
  p [foo, bar] #=> [1, 2]
end

However, we cannot write:

p(json in { foo:, bar: }) #=> expected: true, actual: syntax error

This is because <expr> in <pattern> is an expression but not an argument. For example, foo(json in a, b, c) is ambiguous: it is considered foo((json in a), b, c) and foo((json in a, b, c)).

What should we do?

  1. Do nothing; we admit that it is a spec
  2. Revert the feature
  3. Disallow a pattern like a, b, c or a:, b:, c: in this one-line pattern matching syntax; we ask a user to write json in [a, b, c] or json in {a:, b:, c:}

Related issues

Related to Ruby master - Feature #15865: `<expr> in <pattern>` expressionClosedmatz (Yukihiro Matsumoto)Actions
Actions

Also available in: Atom PDF