From: ruby-core@... Date: 2015-07-19T13:37:41+00:00 Subject: [ruby-core:70042] [Ruby trunk - Feature #11361] proposal for easy method to nil-guard for generated variable name. Issue #11361 has been updated by Marc-Andre Lafortune. Isn't this simpler (and easier to read): @cache ||= {} @cache[id] ||= User.find(1) I can't recall ever needing to do what you want to do. ---------------------------------------- Feature #11361: proposal for easy method to nil-guard for generated variable name. https://bugs.ruby-lang.org/issues/11361#change-53465 * Author: masaki yamada * Status: Open * Priority: Normal * Assignee: ---------------------------------------- It's easy to 'nil-guard' for normal variable. ~~~ def user @user ||= User.find(1) end ~~~ but it's not simple for generated variable name. ~~~ def user(id) variable_name = "@user_#{id}" instance_variable_set(variable_name, User.find(id)) unless instance_variable_defined?(variable_name) instance_variable_get(variable_name) end ~~~ I want to write it like this. ~~~ def user(id) instance_variable_get_or_set("@user_#{id}") { User.find(1) } end ~~~ it can be implemented by this code. ~~~ def instance_variable_get_or_set(variable_name, &block) instance_variable_set(variable_name, block.call) unless instance_variable_defined?(variable_name) instance_variable_get(variable_name) end ~~~ -- https://bugs.ruby-lang.org/