Rubyにおける定数は意図せず書き換えられることがある 以下のような場合、警告すら出ずに定数が書き換えられてしまう。 PERMIT_ID = ['0001', '0002', '1234'] PERMIT_ID.reject! { |id| id == '1234' } p PERMIT_ID # => ["0001", "0002"] Rubyにおける定数は不変の値というより、グローバル変数に近い。 また、Rubyでは先頭が大文字になっている識別子のことを定数としていることから、クラス名であるStringやArrayなども定数として扱っている。 そう考えると、クラスはメソッドを追加したり等いつでも書き換えられるミュータブルなオブジェクトなので、定数が参照するオブジェクトもミュータブルにする必要がある。 よって上記のコードはRuby的に正しい挙動なので警告は出されない。 とはいえ、定数を定
![Rubyで定数を扱う場合はfreezeするべき - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/b58656d526f8ed8891d44092adde523d0b32aa7d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-412672c5f0600ab9a64263b751f1bc81.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk3MiZoPTM3OCZ0eHQ9UnVieSVFMyU4MSVBNyVFNSVBRSU5QSVFNiU5NSVCMCVFMyU4MiU5MiVFNiU4OSVCMSVFMyU4MSU4NiVFNSVBMCVCNCVFNSU5MCU4OCVFMyU4MSVBRmZyZWV6ZSVFMyU4MSU5OSVFMyU4MiU4QiVFMyU4MSVCOSVFMyU4MSU4RCZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZ0eHQtY29sb3I9JTIzMjEyMTIxJnR4dC1mb250PUhpcmFnaW5vJTIwU2FucyUyMFc2JnR4dC1zaXplPTU2JnM9N2NjMTNhNzIyYzk4MjhlMTNkNDJiNWE5NDg4NTdlNmE%26mark-x%3D142%26mark-y%3D57%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZoPTc2Jnc9NzcwJnR4dD0lNDB5dWtpeWFuJnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9MzYmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz04NTI4Zjk2MDU4OWY0ODdmZGUzNzg1ZjM5N2FjZTg4ZQ%26blend-x%3D142%26blend-y%3D486%26blend-mode%3Dnormal%26s%3D051585202370ea64b27b435e41094582)