Imagine this ruby code:
class Class1
def initialize( par1: 1, par2: 2, par3: 3)
@par1 = par1
@par2 = par2
@par3 = par3
end
end
p Class1.new ##<Class1:0x00000002e5c930 @par1=1, @par2=2, @par3=3>
p Class1.new(par1: 'one', par2: 'two', par3: 'three') ##<Class1:0x00000002de0308 @par1="one", @par2="two", @par3="three">
How can I simplify the definition of the variables?
I found a solution with local_variables
and instance_variable_set
:
class Class2
def initialize( par1: 1, par2: 2, par3: 3)
local_variables.each{|local|
#define attribute
var = instance_variable_set("@#{local}", binding.local_variable_get(local))
}
end
end
p Class2.new ##<Class2:0x00000002e5c930 @par1=1, @par2=2, @par3=3>
p Class2.new(par1: 'one', par2: 'two', par3: 'three') ##<Class2:0x00000002de0308 @par1="one", @par2="two", @par3="three">
But is there an easier way?