[ruby-core:95974] [Ruby master Feature#16372] Allow pattern matching to bind instance variables
From:
me@...
Date:
2019-11-27 05:15:32 UTC
List:
ruby-core #95974
Issue #16372 has been updated by jnchito (Junichi Ito).
shevegen (Robert A. Heiler) wrote:
> If I understood you correctly then the suggestion is to allow both local and
> instance variables become assignable, when before pattern matching would only
> be possible to local variables, yes?
Yes, correct. And people might want to use @@variables and $variables too (I rarely use them, though) .
----------------------------------------
Feature #16372: Allow pattern matching to bind instance variables
https://bugs.ruby-lang.org/issues/16372#change-82808
* 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>