From: shevegen@... Date: 2019-11-26T11:11:31+00:00 Subject: [ruby-core:95956] [Ruby master Feature#16372] Allow pattern matching to bind instance variables Issue #16372 has been updated by shevegen (Robert A. Heiler). 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? If that is the case then I think this might make sense, since we can assign to local variables and instance variables as-is, so that would seem logical to have pattern matching work on instance variables as well. It might be useful to ask the ruby user who suggested pattern matching too about this, perhaps there was a reason @variables were not considered (but it could simply be that he did not think about it at all when suggesting the feature). ---------------------------------------- Feature #16372: Allow pattern matching to bind instance variables https://bugs.ruby-lang.org/issues/16372#change-82791 * 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: