Considérez cette infraction signalée par rubocop
lib/awesomelib/aws.rb:6:10: C: Style/MutableConstant: Freeze mutable objects assigned to constants.
IP = '34.111.241.111'
^^^^^^^^^^^^^^^^
Pourquoi devrais-je geler cette adresse IP?
Vous devez figer la valeur attribuée à IP
car vous avez déclaré que IP
est une constante. Cela indique que vous ne souhaitez pas que la valeur affectée à IP
soit modifiée.
Le problème est que dans Ruby, assigner une valeur à une constante ne rend pas la valeur immuable. Vous obtenez juste un avertissement si vous mutez la valeur affectée à la constante. Pour que la valeur soit réellement immuable, vous devez .freeze
la valeur affectée à la constante. Après avoir gelé une valeur affectée à une constante, si vous essayez de modifier la valeur, vous rencontrerez une erreur d'exécution.
Le gel d'un objet signifie que vous n'êtes plus autorisé à le muter. Une constante signifie que vous n'êtes plus autorisé à muter la liaison. (Eh bien, d'accord, vous obtenez un avertissement si vous mute la liaison.) Les deux vont bien ensemble.
En particulier, le fait qu'un objet mutable affecté à une liaison immuable puisse encore être muté, pourrait être source de confusion pour certains. Assistez simplement aux différentes questions sur Stack Overflow à ce sujet:
IP = '34.111.241.111'
# Dis is a constant, I can never change it, amirite?
IP << '.255'
IP
#=> '34.111.241.111.255'
# Ooops!
IP.freeze
IP << '.255'
# RuntimeError: can't modify frozen String