Refactor method overriding.

* Use `class_eval` instead of `instance_eval`.
* Reduce `class_eval` calls
* define `Numeric#i`
* undefine `Complex#i`
This commit is contained in:
Yukihiro "Matz" Matsumoto
2021-02-05 21:43:15 +09:00
parent 7ce03e32b7
commit c6149370b0
+8 -2
View File
@@ -109,8 +109,8 @@ class Complex < Numeric
alias_method :imag, :imaginary
[Integer, Float].each do |cls|
[:+, :-, :*, :/, :==].each do |op|
cls.instance_eval do
cls.class_eval do
[:+, :-, :*, :/, :==].each do |op|
original_operator_name = :"__original_operator_#{op}_complex"
alias_method original_operator_name, op
define_method op do |rhs|
@@ -123,4 +123,10 @@ class Complex < Numeric
end
end
end
Numeric.class_eval do
def i
Complex(0, self)
end
end
undef i
end