VOOZH about

URL: https://rubychallenger.blogspot.com/2012/02/changing-aliased-method-does-not-alter.html

⇱ The Ruby Challenger: Changing aliased method does not alter the original one


Monday, February 27, 2012

Changing aliased method does not alter the original one

Changing aliased method does not alter the original one, and vice-versa.

So, if you need to alter some method that you know it's aliased, you may stay unworried: you won't affect the other aliased methods, and you can use them if you need the original behavior.

See my tests and the results below.

#!/usr/bin/ruby

class A
 def original_method
 puts "original content"
 end
 alias aliased_method original_method
 alias_method :alias_methoded_method, :original_method
end

class B < A
 def original_method
 puts "modified content"
 end
end

class C < A
 def aliased_method
 puts "modified content"
 end
end

class D < A
 def alias_methoded_method
 puts "modified content"
 end
end

[A, B, C, D].each do |klass|
 puts "#{klass}:"
 obj = klass.new
 [:original_method, :aliased_method, :alias_methoded_method].each do |meth|
 print "#{meth}: "
 obj.send meth
 end
 puts
end
The results:
A:
original_method: original content
aliased_method: original content
alias_methoded_method: original content

B:
original_method: modified content
aliased_method: original content
alias_methoded_method: original content

C:
original_method: original content
aliased_method: modified content
alias_methoded_method: original content

D:
original_method: original content
aliased_method: original content
alias_methoded_method: modified content

No comments:

Post a Comment

Subscribe to: Post Comments (Atom)