Ich habe eine Klasse wie folgt:Warum der CONSTANT-Wert in der Klasse geändert wird?
class Example
DEFAULT_VALUE = {
'first_key': ['a', 'b'],
'second_key': 'c'
}
def append_new_value(value)
default_value_copy = DEFAULT_VALUE
default_value_copy[:first_key] << value
puts "default_value_copy: #{default_value_copy}"
puts "DEFAULT_VALUE: #{DEFAULT_VALUE}"
end
end
example = Example.new
example.append_new_value('d')
example.append_new_value('e')
Die Ergebnisse sind:
default_value_copy: {:first_key=>["a", "b", "d"], :second_key=>"c"}
DEFAULT_VALUE: {:first_key=>["a", "b", "d"], :second_key=>"c"}
default_value_copy: {:first_key=>["a", "b", "d", "e"], :second_key=>"c"}
DEFAULT_VALUE: {:first_key=>["a", "b", "d", "e"], :second_key=>"c"}
Wie ich schon verstanden, der Wert von DEFAULT_VALUE sollte nicht nach dem Aufruf append_new_value
Methode geändert werden.
Könnt ihr mir helfen, diesen Fall zu erklären?
Die Konstante ändert sich nicht. Das Objekt, auf das die Konstanten verweisen. Ruby ist keine rein funktionale Sprache, Objekte dürfen sich ändern. –