Issue #12995 has been updated by Herwin Quarantainenet.


You can do that with #tap. A very stupid example:

```ruby
array = [true]
res = array.to_a.tap do |obj|
  if obj[0]
    obj.replace([['true', :val]])
  else
    obj.replace([['false', :val]])
  end
end.to_a.to_h
p res
```

Results in:

```ruby
{"true"=>:val}
```

----------------------------------------
Feature #12995: Conditional expression taking a receiver outside the condition
https://bugs.ruby-lang.org/issues/12995#change-61825

* Author: Tsuyoshi Sawada
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
Since a conditional expression has a return value, we can continue a method chain after a conditional expression like this:

```ruby
if hoge
  foo1.foo2.foo3
else
  bar1.bar2
end
.baz1.baz2.baz3.baz4
```

```ruby
case hoge
when hoge1
  foo1.foo2.foo3
when hoge2
  bar1.bar2
end
.baz1.baz2.baz3.baz4
```

It is convenient if we can have a condition after or in the middle of a chain. I would like to do this:

```ruby
baz1.baz2.baz3.baz4.
if hoge
  foo1.foo2.foo3
else
  bar1.bar2
end
```

```ruby
baz1.baz2.baz3.baz4
if hoge
  .foo1.foo2.foo3
else
  .bar1.bar2
end
```

```ruby
baz1.baz2.baz3.baz4.
case hoge
when hoge1
  foo1.foo2.foo3
when hoge2
  bar1.bar2
end
```

```ruby
baz1.baz2.baz3.baz4
case hoge
when hoge1
  .foo1.foo2.foo3
when hoge2
  .bar1.bar2
end
```



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>