From: Lazaridis Ilias Date: 2011-06-08T00:19:59+09:00 Subject: [ruby-core:36825] [Ruby 1.9 - Feature #4845] Provide Class#cb_object_instantiated_from_literal(object) Issue #4845 has been updated by Lazaridis Ilias. Yukihiro Matsumoto wrote: > Hi, > > In message "Re: [ruby-core:36822] [Ruby 1.9 - Feature #4845] Provide Class#cb_object_instantiated_from_literal(object)" > on Tue, 7 Jun 2011 23:32:31 +0900, Lazaridis Ilias writes: > > |Yukihiro Matsumoto wrote: > |> Besides that, I strongly discourage to intercept literal creation, since it would change the semantics of the fundamental object model. > | > |Discouraging and disabling are two different things. > > I know. But the performance problem _and_ above discouragement make > me feel it's not worth adding. I understand. But the central point should be: the OO model (consistency) breaks essentially. I feel uncomfortable to ask a 3rd time, thus I assume that for now there is no workaround available. Can you please confirm? As for the performance problem: I've shown my interest to look into this, but the issue was rejected immediately. I could look into this and could possibly provide a suggestion which has no speed trade-offs. Just please, can you point me to the relevant source code location(s)? ---------------------------------------- Feature #4845: Provide Class#cb_object_instantiated_from_literal(object) http://redmine.ruby-lang.org/issues/4845 Author: Lazaridis Ilias Status: Rejected Priority: Low Assignee: Yukihiro Matsumoto Category: core Target version: (assuming that this is not a bug, but a speed tradeoff / known issue) class String alias_method :orig_initialize, :initialize def initialize(val) orig_initialize "OBSERVED: " + val end def my_method_test print self.inspect, " test\n" end end oo_string = String.new("The OO String") li_string = "The Literal String" print "Class: ", oo_string.class, " - content: ", oo_string, "\n" print "Class: ", li_string.class, " - content: ", li_string, "\n" oo_string.my_method_test li_string.my_method_test #OUTPUT #=> Class: String - content: OBSERVED: The OO String #=> Class: String - content: The Literal String #=> "OBSERVED: The OO String" test #=> "The Literal String" test - The li_string is an object of class String and responds to the added method "my_method_test". But: the initialize method of the modified String class was not called during instantiation. Is there any chance that this will be changed, thus the "initialize" method is called (if implemented)? If not, the suggestion would be: * provide a call-back Class#cb_object_instantiated_from_literal(object) (or similar) Benefits: * minimal overhead if not used (C-level if *ptr available, call) * allows simple notification about new objects. -- http://redmine.ruby-lang.org