RubyPulse Episode 0.27 - multimethod
... implements dispatch of methods based on argument types. - Kurt
rubypulse ~ $ cat mm.rb
class A
def foo( x )
case x
when Fixnum
"Fixnum #{x.inspect}"
when Numeric
"Numeric #{x.inspect}"
else
"#{x.inspect}"
end
end
end
rubypulse ~ $ irb
irb(main):001:0> load 'mm.rb'
=> true
irb(main):002:0> a = A.new
=> #
irb(main):003:0> a.foo :a
=> ":a"
irb(main):004:0> a.foo :a1
=> "Fixnum 1"
irb(main):005:0> a.foo 1.2
=> "Numeric 1.2"
rubypulse ~ $ irb
irb(main):002:0> require 'rubygems'
irb(main):010:0* require 'multimethod'
=> true
irb(main):011:0>
irb(main):012:0* class A
irb(main):013:1> multimethod %q{
irb(main):014:1' def foo(x) # matches any argument type
irb(main):015:1' "#{x.inspect}"
irb(main):016:1' end
irb(main):017:1' }
irb(main):018:1>
irb(main):019:1* multimethod %q{
irb(main):020:1' def foo(Fixnum x) # matches any Fixnum
irb(main):021:1' "Fixnum #{x.inspect}"
irb(main):022:1' end
irb(main):023:1' }
irb(main):024:1>
irb(main):025:1* multimethod %q{
irb(main):026:1' def foo(Numeric x) # matches any Numeric
irb(main):027:1' "Numeric #{x.inspect}"
irb(main):028:1' end
irb(main):029:1' }
irb(main):030:1> end
=> nil
irb(main):031:0> A
=> A
irb(main):032:0> a = .A.new
=> #
irb(main):033:0> a.foo :a
=> ":a"
irb(main):034:0> a.foo 1
=> "Fixnum 1"
irb(main):035:0> a.foo 1.33
=> "Numeric 1.33"
Links for this episode
| HomePage of multimethod |
Tags : multimethod