ruby - polimorfismo - que es un metodo en programacion
Obtener una lista de los métodos de instancia de una clase (6)
Tengo una clase:
class TestClass
def method1
end
def method2
end
def method3
end
end
¿Cómo puedo obtener una lista de mis métodos en esta clase ( method1
, method2
, method3
)?
De acuerdo con Ruby Doc instance_methods
Devuelve una matriz que contiene los nombres de los métodos de instancia públicos y protegidos en el receptor. Para un módulo, estos son los métodos públicos y protegidos; para una clase, son los métodos de instancia (no solo). Si el parámetro opcional es falso, los métodos de cualquier antepasado no están incluidos. Estoy tomando el ejemplo de documentación oficial.
module A
def method1()
puts "method1 say hi"
end
end
class B
include A #mixin
def method2()
puts "method2 say hi"
end
end
class C < B #inheritance
def method3()
puts "method3 say hi"
end
end
Veamos la salida.
A.instance_methods(false)
=> [:method1]
A.instance_methods
=> [:method1]
B.instance_methods
=> [:method2, :method1, :nil?, :===, ...# ] # methods inherited from parent class, most important :method1 is also visible because we mix module A in class B
B.instance_methods(false)
=> [:method2]
C.instance_methods
=> [:method3, :method2, :method1, :nil?, :===, ...#] # same as above
C.instance_methods(false)
=> [:method3]
En realidad, quiere TestClass.instance_methods
, a menos que esté interesado en lo que TestClass
puede hacer.
class TestClass
def method1
end
def method2
end
def method3
end
end
TestClass.methods.grep(/method1/) # => []
TestClass.instance_methods.grep(/method1/) # => ["method1"]
TestClass.methods.grep(/new/) # => ["new"]
O puede invocar methods
(no instance_methods
) en el objeto:
test_object = TestClass.new
test_object.methods.grep(/method1/) # => ["method1"]
$ irb --simple-prompt
class TestClass
def method1
end
def method2
end
def method3
end
end
tc_list = TestClass.instance_methods(false)
#[:method1, :method2, :method3]
puts tc_list
#method1
#method2
#method3
TestClass.instance_methods
o sin todos los métodos heredados
TestClass.instance_methods - Object.methods
(Fue ''TestClass.methods - Object.methods'')
TestClass.methods(false)
para obtener solo métodos que pertenecen solo a esa clase.
TestClass.instance_methods(false)
devolvería los métodos de su ejemplo dado (ya que son métodos de instancia de TestClass).