vuelve seguir puedo pueden porque poner permite los intentarlo hashtags guardaron guardan funcionan cuantos cambios aparezco ruby introspection public-method

ruby - seguir - ¿Cómo obtengo los métodos públicos de una clase sin métodos heredados?



porque no puedo seguir hashtag en instagram (2)

Echa un vistazo a Module#instance_methods . Ese método tiene un argumento booleano include_super si se deben devolver los métodos heredados también. El valor predeterminado es verdadero.

Puedes usar lo siguiente:

class A def method_1 puts "method from A" end end class B < A def method_2 puts "method from B" end end B.instance_methods # => [:method_1, :method_2, ...] B.instance_methods(false) # => [:method_2]

Dado cualquier objeto, puedo llamar a #public_methods y ver todos los métodos a los que responderá. Sin embargo, a veces me parece útil obtener una lista rápida de todos los métodos públicos que no se heredan, es decir, las cosas que realmente forman parte de esta clase.

Encontré en "Una forma fácil de enumerar métodos públicos para un objeto Ruby " que si uso:

(Foo.public_methods - Object.public_methods).sort

Puedo filtrar un montón de cosas básicas de Ruby. Me gustaría poder filtrar todo lo que se heredó hasta la cadena. Si conozco la clase primaria, puedo filtrarla al usarla, pero me gustaría crear un comando genérico que pueda devolver una matriz de los métodos públicos no heredados para cualquier objeto.


Solo pasa false para el argumento inherited de public_methods :

"hello".public_methods.include?(:dup) # => true "hello".public_methods(false).include?(:dup) # => false

No es una respuesta a su pregunta, pero en caso de que no lo supiera, irb realiza el autocompletado, por lo que es fácil obtener la lista de métodos públicos (especialmente si conoce el principio del método que está buscando). Solo presiona la pestaña; Si lo pulsa dos veces, se enumerarán todas las posibilidades (incluidas las heredadas, sin embargo):

> "nice".d<tab><tab> "nice".delete "nice".delete! "nice".display "nice".downcase "nice".downcase! "nice".dump "nice".dup "nice".define_singleton_method > "nice".<tab><tab> Display all 162 possibilities? (y or n) ...

El uso de la pry hace que sea aún más fácil ver los métodos disponibles, desglosados ​​por nivel de herencia:

[1] pry(main)> cd "nice" [2] pry("nice"):1> ls Comparable#methods: < <= > >= between? String#methods: % * + << <=> == === =~ [] []= ascii_only? bytes bytesize byteslice capitalize capitalize! casecmp center chars chomp chomp! chop chop! chr clear codepoints concat count crypt delete delete! downcase downcase! dump each_byte each_char each_codepoint each_line empty? encode encode! encoding end_with? eql? force_encoding getbyte gsub gsub! hash hex include? index insert inspect intern length lines ljust lstrip lstrip! match next next! oct ord partition prepend replace reverse reverse! rindex rjust rpartition rstrip rstrip! scan setbyte shellescape shellsplit size slice slice! split squeeze squeeze! start_with? strip strip! sub sub! succ succ! sum swapcase swapcase! to_c to_f to_i to_r to_s to_str to_sym tr tr! tr_s tr_s! unpack upcase upcase! upto valid_encoding? locals: _ _dir_ _ex_ _file_ _in_ _out_ _pry_