Project

General

Profile

Actions

Feature #11361

open

proposal for easy method to nil-guard for generated variable name.

Added by masarakki (masaki yamada) about 6 years ago. Updated over 5 years ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-core:70009]

Description

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
Actions

Also available in: Atom PDF