[ruby-core:95954] [Ruby master Feature#16372] Allow pattern matching to bind instance variables
From:
me@...
Date:
2019-11-26 10:18:41 UTC
List:
ruby-core #95954
Issue #16372 has been reported by jnchito (Junichi Ito).
----------------------------------------
Feature #16372: Allow pattern matching to bind instance variables
https://bugs.ruby-lang.org/issues/16372
* Author: jnchito (Junichi Ito)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
I tried this code, but got sytax error:
```ruby
case [1, 2]
in @a, @b
end
```
```
syntax error, unexpected instance variable, expecting '}'
in @a, @b
^~
```
I think it would be more useful if we could bind instance variables with pattern matching.
## Use case
I understand this is not Rails way, but we have some codes like this:
```ruby
def Foo.create_foo(params)
if valid?(params)
[:ok, create(params)]
else
[:ng, nil]
end
end
class FooController < ApplicationController
def create
result, @foo = Foo.create_foo(foo_params)
case result
when :ok
redirect_to @foo
when :ng
# @foo will be used in view
render :new
else
raise "Unknown result: #{result}"
end
end
end
```
I thought I could make it simpler with pattern matching (but impossible):
```ruby
class FooController < ApplicationController
def create
case Foo.create_foo(foo_params)
in :ok, @foo
redirect_to @foo
in :ng, _
render :new
end
end
end
```
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:[email protected]?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>