Override method_missing method to provide meaningful error message : method_missing « Reflection « Ruby

Home
Ruby
1.ActiveRecord
2.Array
3.CGI
4.Class
5.Collections
6.Database
7.Date
8.Design Patterns
9.Development
10.File Directory
11.GUI
12.Hash
13.Language Basics
14.Method
15.Network
16.Number
17.Rails
18.Range
19.Reflection
20.Statement
21.String
22.Threads
23.Time
24.Tk
25.Unit Test
26.Windows Platform
27.XML
Ruby » Reflection » method_missing 




Override method_missing method to provide meaningful error message


class Fixnum
  def method_missing(m, *args)
    if args.size > 0
      raise ArgumentError.new("wrong number of arguments (#{args.size} for 0)")
    end

    match = /^plus_([0-9]+)$/.match(m.to_s)
    if match
      self + match.captures[0].to_i
    else
      raise NoMethodError.
    new("undefined method '#{m}' for #{inspect}:#{self.class}")
    end
  end
end

4.plus_5                                          # => 9
10.plus_0                                         # => 10
-1.plus_2                                         # => 1
100.plus_10000                                    # => 10100
20.send(:plus_25)                                 # => 45

100.minus_3
# NoMethodError: undefined method 'minus_3' for 100:Fixnum
100.plus_5(105)
# ArgumentError: wrong number of arguments (for 0)

 














Related examples in the same category
1.Convert all system command to all class method
2.Responding to Calls to Undefined Methods
3.Create a new class and override the method_missing method
4.If method does not exist, call the default one
5.Create new method dynamically
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.