From: me@... Date: 2019-11-27T05:15:32+00:00 Subject: [ruby-core:95974] [Ruby master Feature#16372] Allow pattern matching to bind instance variables 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: