From: KOSAKI Motohiro Date: 2013-03-13T06:05:17+09:00 Subject: [ruby-core:53344] Re: [ruby-trunk - Bug #8078][Open] Once nil is frozen, an unfrozen instance cannot be reached > This is a rather peculiar bug I stumbled across. The basic issue is that once `nil` has been frozen, there is no way to access an unfrozen instance of nil. > > nil.frozen? => false > nil.freeze > nil.frozen? => true > > I say this is a peculiar bug because generally it doesn't matter if `nil` is frozen or not (since it is basically frozen even if not explicitly defined as such). However, since Ruby is based upon duck typing, you might run into a scenario like the following: > > def get(cache_key) > content = Rails.cache.read(cache_key) > content.frozen? ? content.dup : content > end > > If I call the above method and the cache key exists, `content` is a frozen string, which I then `dup` to get an unfrozen copy. If I call the above method and the cache key does NOT exist, `content` is a frozen `nil`, which it then attempts to `dup` unsuccessfully since a NilClass instance cannot be duped. Hmm... I don't think nil is mutable logically. Why can't we make nil is frozen at beginning?