Hello, I need to add in runtime several methods to my class. How can I
accomplish this in ruby?
More precisely: I need my class to overload arithmetic operators with
fixnums in both ways (4+MyClass, MyClass+4). All the necessary info is
stored in a hash, so I created a method to do all the stuff. It looks
like do_operation(operator, other)
But still I have to add every single operator overloader:
class Fixnum
def doo_operation(operator, other)
#…nevermind…
end
def +(other)
do_operation(:+, other)
end
def -(other)
do_operation(:-, other)
end
end
def operation operator, other
puts "operator #{operator} with argument #{other} called"
end
OPERATORS = [:+,:-,:/,:*]
def self.included mod
mod.instance_eval do
OPERATORS.each do |op|
begin
instance_method(op)
alias_method(:"_#{op}", op)
rescue
# swallow NameError here
end
define_method op do |other|
# here you might want to check for 'other' class to
preserve Numeric/Enumerable behaviour
operation op, other
end
end
end
end
end
class Fixnum
include Operators
end
1 + 2
1.send :"_+" ,2 # original
class A
include Operators
end
A.new + A.new
lopex
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.