Thank you. I was surprised by the way hash behaves, but I do understand why. Its obvious in hind-sight, I guess you could say. But thanks for the .freeze example, that's exactly what I was look for. Many thanks, Wiktor On 5/31/06, MenTaLguY <mental / rydia.net> wrote: > On Thu, 1 Jun 2006 04:29:39 +0900, "Wiktor Macura" <wmacura / gmail.com> wrote: > > Hello. > > > > This seems to be trivial, yet I can't find an explanation for it > > anywhere online. Apologies if I'm asking the obvious. > > > > If you create a constant hash: > > > > CONSTANTHASH = { :foo => "foobar" } > > x = CONSTANTHASH[:foo] > > x << "-suffix" > > p CONSTANTHASH > > It's not a constant hash, but rather a constant which holds a reference to a hash. The constant can't be changed to point to a different hash (well ... not without a warning anyway), but the hash itself can still be modified: > > CONSTANTHASH = { :foo => "foobar" } > CONSTANTHASH[:bar] = "zoom" > p CONSTANTHASH[:bar] > > If you want to render an object immune to modification, freeze it. > > CONSTANTHASH = { :foo => "foobar".freeze }.freeze > > (It isn't necessary to freeze "value types" like symbols or fixnums, though, since -- unlike strings or hashes -- they are naturally immutable.) > > -mental > > >