Take this class as an example:
class MyClass
attr_accessor :values, :uniq_values
def initialize(value)
self.uniq_values = ['default_value']
self.values = ['default_value']
copy_value(value)
add_value(value)
end
def copy_value(value)
uniq_values |= [value]
end
def add_value(value)
values << value
end
def run
puts "uniq_values: #{uniq_values}"
puts "values: #{values}"
end
end
obj = MyClass.new('poop')
obj.run
# Expect 'uniq_values' and 'values' to be the same
# OUTPUT:
# uniq_values: ["default_value"]
# values: ["default_value", "poop"]
I can get the desired output by using self.uniq_values |= [value]
, however I would expect that it would be necessary with the <<
operator as well. Can anyone explain the difference?