Subsecciones


Manejando Métodos No Definidos: method_missing

MacBookdeCasiano:rubytesting casiano$ cat -n searchmethod.rb 
     1  class A
     2    def tutu
     3      puts "A::tutu"
     4    end
     5    def method_missing(name, *args)
     6      puts "In A::method missing"
     7    end
     8  end
     9  
    10  class B < A
    11    def method_missing(name, *args)
    12      puts "In B::method missing"
    13    end
    14  end
    15  
    16  x = B.new
    17  x.tutu()    # A::tutu
    18  
    19  y = A.new
    20  y.titi()    # In A::method missing
    21  
    22  z = B.new   # In B::method missing
    23  z.tete()

MacBookdeCasiano:rubytesting casiano$ ruby searchmethod.rb 
A::tutu
In A::method missing
In B::method missing

~/chapter8ReflectionandMetaprogramming$ cat -n method_missing.rb 
     1  class Shell
     2    def method_missing(method, *args)
     3      r = %x{#{method} #{args.join(' ')} 2>&1}
     4      return r unless block_given?
     5      yield r 
     6    end
     7  end
     8  
     9  s = Shell.new
    10  puts s.ls('-l', 'r*.rb') { |x|
    11    puts "inside block" 
    12    x.gsub(/^/,'** ')
    13  }
    14  puts s.uname

~/chapter8ReflectionandMetaprogramming$ ruby method_missing.rb 
inside block
** -rw-r--r--  1 casianorodriguezleon  staff  1195  1 nov 10:05 recipes.rb
** -rw-r--r--  1 casianorodriguezleon  staff  1194  1 nov 10:05 recipes2.rb
** -rw-r--r--  1 casianorodriguezleon  staff   483 12 nov 11:08 ruport_example.rb
Darwin

~/chapter8ReflectionandMetaprogramming$ cat -n method_missing2.rb 
     1  def method_missing(method, *args)
     2    r = %x{#{method} #{args.join(' ')} 2>&1}
     3    return r unless block_given?
     4    yield r 
     5  end
     6  
     7  puts ls('-l', 'r*.rb') { |x|
     8    puts "inside block" 
     9    x.gsub(/^/,'** ')
    10  }
    11  puts uname
~/chapter8ReflectionandMetaprogramming$ ruby method_missing2.rb 
inside block
** -rw-r--r--  1 casianorodriguezleon  staff  1195  1 nov 10:05 recipes.rb
** -rw-r--r--  1 casianorodriguezleon  staff  1194  1 nov 10:05 recipes2.rb
** -rw-r--r--  1 casianorodriguezleon  staff   483 12 nov 11:08 ruport_example.rb
Darwin

Véase También

  1. Ruby for Newbies: Missing Methods



Casiano Rodriguez León 2015-01-07