I''m trying to monkeypatch the []= method in the Hash class: Hash.class_eval do def []_with_feature=(a,b) puts ''foo'' end alias_method_chain :[]=, :feature end Something is wrong with the syntax, but I can''t figure out what. The alias_method_chain method does look for punctuation (= in this case) and expects it to be at the end of the aliased method ([] _with_feature=), but I get the following syntax error: SyntaxError: compile error (irb):5: syntax error, unexpected '')'', expecting ''='' (irb):7: syntax error, unexpected kEND, expecting '')'' (irb):9: syntax error, unexpected kEND, expecting '')'' Any ideas? Thanks, -H --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 6 Jan 2009, at 23:36, Harold wrote:> > I''m trying to monkeypatch the []= method in the Hash class: >doesn''t seem to be anything to do with alias_method_chain - just sticking def []_with_feature=(a,b) puts ''foo'' end into irb causes similar errors. You''ll just have to skip alias method chain this time. Fred> Hash.class_eval do > def []_with_feature=(a,b) > puts ''foo'' > end > alias_method_chain :[]=, :feature > end > > Something is wrong with the syntax, but I can''t figure out what. The > alias_method_chain method does look for punctuation (= in this case) > and expects it to be at the end of the aliased method ([] > _with_feature=), but I get the following syntax error: > > SyntaxError: compile error > (irb):5: syntax error, unexpected '')'', expecting ''='' > (irb):7: syntax error, unexpected kEND, expecting '')'' > (irb):9: syntax error, unexpected kEND, expecting '')'' > > Any ideas? > > Thanks, > -H > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks for the response. So how in the world is this implemented? The []= method''s source code is in C. Other classes override it in a subclass, which works fine, but how would I go about implementing a method that works like the Hash class'' []= method? I''m not sure what you mean by "skipping alias_method_chain" this time. If I do alias :[]_without_feature=, :[]alias :[]=, :[]_with_feature I get the same error, as expected. So how would I go about changing this method''s behavior? Thanks again, -H On Tue, Jan 6, 2009 at 6:49 PM, Frederick Cheung <frederick.cheung-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> wrote:> > > On 6 Jan 2009, at 23:36, Harold wrote: > > > > > I''m trying to monkeypatch the []= method in the Hash class: > > > > doesn''t seem to be anything to do with alias_method_chain - just > sticking > def []_with_feature=(a,b) > puts ''foo'' > end > > into irb causes similar errors. You''ll just have to skip alias method > chain this time. > > Fred > > Hash.class_eval do > > def []_with_feature=(a,b) > > puts ''foo'' > > end > > alias_method_chain :[]=, :feature > > end > > > > Something is wrong with the syntax, but I can''t figure out what. The > > alias_method_chain method does look for punctuation (= in this case) > > and expects it to be at the end of the aliased method ([] > > _with_feature=), but I get the following syntax error: > > > > SyntaxError: compile error > > (irb):5: syntax error, unexpected '')'', expecting ''='' > > (irb):7: syntax error, unexpected kEND, expecting '')'' > > (irb):9: syntax error, unexpected kEND, expecting '')'' > > > > Any ideas? > > > > Thanks, > > -H > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On 6 Jan 2009, at 23:56, Harold A. Giménez Ch. wrote:> Thanks for the response. > > So how in the world is this implemented? The []= method''s source > code is in C. Other classes override it in a subclass, which works > fine, but how would I go about implementing a method that works like > the Hash class'' []= method? > > I''m not sure what you mean by "skipping alias_method_chain" this > time. If I do > > alias :[]_without_feature=, :[]> alias :[]=, :[]_with_feature > > I get the same error, as expected. So how would I go about changing > this method''s behavior? >just call it square_bracket_without feature or something like that. the problem isn;t the method aliasing it''s defining a method called []_with_feature Fred> Thanks again, > -H > > On Tue, Jan 6, 2009 at 6:49 PM, Frederick Cheung <frederick.cheung@gmail.com > > wrote: > > > On 6 Jan 2009, at 23:36, Harold wrote: > > > > > I''m trying to monkeypatch the []= method in the Hash class: > > > > doesn''t seem to be anything to do with alias_method_chain - just > sticking > def []_with_feature=(a,b) > puts ''foo'' > end > > into irb causes similar errors. You''ll just have to skip alias method > chain this time. > > Fred > > Hash.class_eval do > > def []_with_feature=(a,b) > > puts ''foo'' > > end > > alias_method_chain :[]=, :feature > > end > > > > Something is wrong with the syntax, but I can''t figure out what. The > > alias_method_chain method does look for punctuation (= in this case) > > and expects it to be at the end of the aliased method ([] > > _with_feature=), but I get the following syntax error: > > > > SyntaxError: compile error > > (irb):5: syntax error, unexpected '')'', expecting ''='' > > (irb):7: syntax error, unexpected kEND, expecting '')'' > > (irb):9: syntax error, unexpected kEND, expecting '')'' > > > > Any ideas? > > > > Thanks, > > -H > > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
I was focusing on the "=" being the problem... Worked nicely. Many thanks! On Tue, Jan 6, 2009 at 7:20 PM, Frederick Cheung <frederick.cheung-Re5JQEeQqe8@public.gmane.orgm> wrote:> > > On 6 Jan 2009, at 23:56, Harold A. Giménez Ch. wrote: > > > Thanks for the response. > > > > So how in the world is this implemented? The []= method''s source > > code is in C. Other classes override it in a subclass, which works > > fine, but how would I go about implementing a method that works like > > the Hash class'' []= method? > > > > I''m not sure what you mean by "skipping alias_method_chain" this > > time. If I do > > > > alias :[]_without_feature=, :[]> > alias :[]=, :[]_with_feature > > > > I get the same error, as expected. So how would I go about changing > > this method''s behavior? > > > > just call it square_bracket_without feature or something like that. > the problem isn;t the method aliasing it''s defining a method called > []_with_feature> > Fred > > > Thanks again, > > -H > > > > On Tue, Jan 6, 2009 at 6:49 PM, Frederick Cheung < > frederick.cheung-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org > > > wrote: > > > > > > On 6 Jan 2009, at 23:36, Harold wrote: > > > > > > > > I''m trying to monkeypatch the []= method in the Hash class: > > > > > > > doesn''t seem to be anything to do with alias_method_chain - just > > sticking > > def []_with_feature=(a,b) > > puts ''foo'' > > end > > > > into irb causes similar errors. You''ll just have to skip alias method > > chain this time. > > > > Fred > > > Hash.class_eval do > > > def []_with_feature=(a,b) > > > puts ''foo'' > > > end > > > alias_method_chain :[]=, :feature > > > end > > > > > > Something is wrong with the syntax, but I can''t figure out what. The > > > alias_method_chain method does look for punctuation (= in this case) > > > and expects it to be at the end of the aliased method ([] > > > _with_feature=), but I get the following syntax error: > > > > > > SyntaxError: compile error > > > (irb):5: syntax error, unexpected '')'', expecting ''='' > > > (irb):7: syntax error, unexpected kEND, expecting '')'' > > > (irb):9: syntax error, unexpected kEND, expecting '')'' > > > > > > Any ideas? > > > > > > Thanks, > > > -H > > > > > > > > > > > > > > > > > > > > > >--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---