From: shugo@... Date: 2015-12-17T01:32:21+00:00 Subject: [ruby-core:72198] [Ruby trunk - Bug #11828] [Feedback] Object#freeze grid-locks Ruby Issue #11828 has been updated by Shugo Maeda. Status changed from Open to Feedback Daniel P. Clark wrote: > It seems safe to freeze most any class type in Ruby. But if you call `Object.freeze` nothing from then on can be created in either class of method form. > > Is this okay behavior to have in Ruby? > > ~~~ruby > Object.freeze > > class A > end > # => RuntimeError: can't modify frozen # > ~~~ The above code tries to define the constant `A` in `Object`, so a RuntimeError is raised. > ~~~ruby > def x > end > # => RuntimeError: can't modify frozen class > ~~~ The above code tries to define the method `x` in `Object`, so a RuntimeError is raised. The following code avoiding such operations on `Object` works correctly even if `Object` is frozen: ```ruby a = Class.new { def foo puts "foo" end } a.new.foo ``` > But all singleton instances are frozen. What does "all singleton instances" mean? ---------------------------------------- Bug #11828: Object#freeze grid-locks Ruby https://bugs.ruby-lang.org/issues/11828#change-55610 * Author: Daniel P. Clark * Status: Feedback * Priority: Normal * Assignee: * ruby -v: * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- It seems safe to freeze most any class type in Ruby. But if you call `Object.freeze` nothing from then on can be created in either class of method form. Is this okay behavior to have in Ruby? ~~~ruby Object.freeze class A end # => RuntimeError: can't modify frozen # def x end # => RuntimeError: can't modify frozen class ~~~ I noticed that Procs can still be defined. ~~~ruby prc = proc {|a| a+1} prc.call(4) # => 5 ~~~ But all singleton instances are frozen. -- https://bugs.ruby-lang.org/