Project

General

Profile

Actions

Bug #20931

closed

Using `in` as an expression requires extra parentheses

Added by stephenprater (Stephen Prater) 14 days ago. Updated 14 days ago.

Status:
Rejected
Assignee:
-
Target version:
-
[ruby-core:120106]

Description

TBH - I'm not sure if this is a bug or not - but it certainly surprising behavior and I'd at least like to understand it.

Given a hash t - that can be pattern matched: t = {a: 1, b:1 }

r = t in {a: 1, c:1 } # returns `false`
r # {a: 1, c: 1} wat

Presumably this is because = binds higher than in - so that expression is equivalent to (r = t) in {a: 1, c: 1}

But in that case - why does using the results of in require an additional set of parentheses to avoid a syntax error when the result of the expression is used as an argument to a method?

puts(t in {a: 1, c: 1}) # syntax error
puts((t in {a: 1, c: 1}) # false

Especially since this works fine:

puts(case t; in { a: 1, c:1 }; true; else false; end)
Actions

Also available in: Atom PDF

Like0
Like0Like0Like1