Rubys magic language
This is a piece of code I keep to remind me of the magic in Ruby.
class Main # you can dynamically define methods with define_method # use {} or do/end define_method(:test2) { puts "this is test2" test3 } def add_new_method # you can also send the :define_method to the class (note: self.class) self.class.send(:define_method, :newMethod) do test1 test2 end end def test1 puts "this is test1" end def test3 puts "this is test3" end end class Doctor #dynamically define multiple methods ["rhinoplasty", "checkup", "interpretive_dance"].each do |action| define_method("perform_#{action}") do |argument| "performing #{action.gsub('_', ' ')} on #{argument}" end end end # # Testing usage # doctor = Doctor.new puts doctor.perform_rhinoplasty("nose") puts doctor.perform_checkup("throat") puts doctor.perform_interpretive_dance("in da club") m = Main.new m.test1 m.test2 m.add_new_method m.newMethod
Dynamically adding methods to your class can be very useful when creating DSLs or devtools that can be hard/impossible to create in other languages.