Si je veux répertorier toutes les méthodes d'une classe, je peux utiliser Class_Name.methods
. Par exemple, pour répertorier toutes les méthodes de la classe FixNum
:
> 5.methods
=> [:to_s, :-@, :+, :-, :*, :/, :div, :%, :modulo, :divmod, :fdiv, :**, :abs, :magnitude, :==, :===, :<=>, :>, :>=, :<, :<=, :~, :&, :|, :^, :[], :<<, :>>, :to_f, :size, :zero?, :odd?, :even?, :succ, :integer?, :upto, :downto, :times, :next, :pred, :chr, :ord, :to_i, :to_int, :floor, :ceil, :truncate, :round, :gcd, :lcm, :gcdlcm, :numerator, :denominator, :to_r, :rationalize, :singleton_method_added, :coerce, :i, :+@, :eql?, :quo, :remainder, :real?, :nonzero?, :step, :to_c, :real, :imaginary, :imag, :abs2, :arg, :angle, :phase, :rectangular, :rect, :polar, :conjugate, :conj, :between?, :nil?, :=~, :!~, :hash, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :freeze, :frozen?, :inspect, :methods, :singleton_methods, :protected_methods, :private_methods, :public_methods, :instance_variables, :instance_variable_get, :instance_variable_set, :instance_variable_defined?, :instance_of?, :kind_of?, :is_a?, :tap, :send, :public_send, :respond_to?, :respond_to_missing?, :extend, :display, :method, :public_method, :define_singleton_method, :object_id, :to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__, :__id__]
Cette liste est vraiment difficile à lire. J'ai aussi essayé 5.methods.sort
mais cela ne le rend pas plus lisible.
J'utilise fréquemment la liste des méthodes lors de ma programmation quotidienne. Y a-t-il un moyen d'imprimer en joliment cela pour qu'il soit plus facile à lire?
Essayez ce one-liner:
puts 5.methods.sort
J'aime utiliser awesome_print
pour cela. En prime, il vous donne la sortie colorisée, l’architecture de la méthode et son origine:
1.9.3-p125 :001 > require 'ap'
=> true
1.9.3-p125 :002 > ap 5.methods; 0
[
[ 0] !() Fixnum (BasicObject)
[ 1] !=(arg1) Fixnum (BasicObject)
[ 2] !~(arg1) Fixnum (Kernel)
[ 3] %(arg1) Fixnum
[ 4] &(arg1) Fixnum
[ 5] *(arg1) Fixnum
[ 6] **(arg1) Fixnum
[ 7] +(arg1) Fixnum
[ 8] +@() Fixnum (Numeric)
[ 9] -(arg1) Fixnum
[ 10] -@() Fixnum
[ 11] /(arg1) Fixnum
[ 12] <(arg1) Fixnum
[ 13] <<(arg1) Fixnum
[ 14] <=(arg1) Fixnum
[ 15] <=>(arg1) Fixnum
[ 16] ==(arg1) Fixnum
[ 17] ===(arg1) Fixnum
[ 18] =~(arg1) Fixnum (Kernel)
[ 19] >(arg1) Fixnum
[ 20] >=(arg1) Fixnum
[ 21] >>(arg1) Fixnum
[ 22] [](arg1) Fixnum
[ 23] ^(arg1) Fixnum
[ 24] __id__() Fixnum (Kernel)
[ 25] __send__(*arg1) Fixnum (BasicObject)
[ 26] abs() Fixnum
[ 27] abs2() Fixnum (Numeric)
[ 28] ai(*options) Fixnum (Kernel)
[ 29] angle() Fixnum (Numeric)
[ 30] arg() Fixnum (Numeric)
[ 31] awesome_inspect(*options) Fixnum (Kernel)
[ 32] awesome_print(object, *options) Fixnum (Kernel)
[ 33] between?(arg1, arg2) Fixnum (Comparable)
[ 34] ceil() Fixnum (Integer)
[ 35] chr(*arg1) Fixnum (Integer)
[ 36] class() Fixnum (Kernel)
[ 37] clone() Fixnum (Kernel)
[ 38] coerce(arg1) Fixnum (Numeric)
[ 39] conj() Fixnum (Numeric)
[ 40] conjugate() Fixnum (Numeric)
[ 41] define_singleton_method(*arg1) Fixnum (Kernel)
[ 42] denominator() Fixnum (Integer)
[ 43] display(*arg1) Fixnum (Kernel)
[ 44] div(arg1) Fixnum
[ 45] divmod(arg1) Fixnum
[ 46] downto(arg1) Fixnum (Integer)
[ 47] dup() Fixnum (Kernel)
[ 48] enum_for(*arg1) Fixnum (Kernel)
[ 49] eql?(arg1) Fixnum (Numeric)
[ 50] equal?(arg1) Fixnum (BasicObject)
[ 51] even?() Fixnum
[ 52] extend(*arg1) Fixnum (Kernel)
[ 53] fdiv(arg1) Fixnum
[ 54] floor() Fixnum (Integer)
[ 55] freeze() Fixnum (Kernel)
[ 56] frozen?() Fixnum (Kernel)
[ 57] gcd(arg1) Fixnum (Integer)
[ 58] gcdlcm(arg1) Fixnum (Integer)
[ 59] hash() Fixnum (Kernel)
[ 60] i() Fixnum (Numeric)
[ 61] imag() Fixnum (Numeric)
[ 62] imaginary() Fixnum (Numeric)
[ 63] initialize_clone(arg1) Fixnum (Kernel)
[ 64] initialize_dup(arg1) Fixnum (Kernel)
[ 65] inspect() Fixnum (Kernel)
[ 66] instance_eval(*arg1) Fixnum (BasicObject)
[ 67] instance_exec(*arg1) Fixnum (BasicObject)
[ 68] instance_of?(arg1) Fixnum (Kernel)
[ 69] instance_variable_defined?(arg1) Fixnum (Kernel)
[ 70] instance_variable_get(arg1) Fixnum (Kernel)
[ 71] instance_variable_set(arg1, arg2) Fixnum (Kernel)
[ 72] instance_variables() Fixnum (Kernel)
[ 73] integer?() Fixnum (Integer)
[ 74] is_a?(arg1) Fixnum (Kernel)
[ 75] kind_of?(arg1) Fixnum (Kernel)
[ 76] lcm(arg1) Fixnum (Integer)
[ 77] magnitude() Fixnum
[ 78] method(arg1) Fixnum (Kernel)
[ 79] methods(*args) Fixnum (Object)
[ 80] modulo(arg1) Fixnum
[ 81] next() Fixnum (Integer)
[ 82] nil?() Fixnum (Kernel)
[ 83] nonzero?() Fixnum (Numeric)
[ 84] numerator() Fixnum (Integer)
[ 85] object_id() Fixnum (Kernel)
[ 86] odd?() Fixnum
[ 87] ord() Fixnum (Integer)
[ 88] phase() Fixnum (Numeric)
[ 89] polar() Fixnum (Numeric)
[ 90] pred() Fixnum (Integer)
[ 91] private_methods(*args) Fixnum (Object)
[ 92] protected_methods(*args) Fixnum (Object)
[ 93] public_method(arg1) Fixnum (Kernel)
[ 94] public_methods(*args) Fixnum (Object)
[ 95] public_send(*arg1) Fixnum (Kernel)
[ 96] quo(arg1) Fixnum (Numeric)
[ 97] rationalize(*arg1) Fixnum (Integer)
[ 98] real() Fixnum (Numeric)
[ 99] real?() Fixnum (Numeric)
[100] rect() Fixnum (Numeric)
[101] rectangular() Fixnum (Numeric)
[102] remainder(arg1) Fixnum (Numeric)
[103] respond_to?(*arg1) Fixnum (Kernel)
[104] respond_to_missing?(arg1, arg2) Fixnum (Kernel)
[105] round(*arg1) Fixnum (Integer)
[106] send(*arg1) Fixnum (Kernel)
[107] singleton_class() Fixnum (Kernel)
[108] singleton_method_added(arg1) Fixnum (Numeric)
[109] singleton_methods(*args) Fixnum (Object)
[110] size() Fixnum
[111] step(*arg1) Fixnum (Numeric)
[112] succ() Fixnum
[113] taint() Fixnum (Kernel)
[114] tainted?() Fixnum (Kernel)
[115] tap() Fixnum (Kernel)
[116] times() Fixnum (Integer)
[117] to_c() Fixnum (Numeric)
[118] to_enum(*arg1) Fixnum (Kernel)
[119] to_f() Fixnum
[120] to_i() Fixnum (Integer)
[121] to_int() Fixnum (Integer)
[122] to_r() Fixnum (Integer)
[123] to_s(*arg1) Fixnum
[124] truncate() Fixnum (Integer)
[125] trust() Fixnum (Kernel)
[126] untaint() Fixnum (Kernel)
[127] untrust() Fixnum (Kernel)
[128] untrusted?() Fixnum (Kernel)
[129] upto(arg1) Fixnum (Integer)
[130] zero?() Fixnum
[131] |(arg1) Fixnum
[132] ~() Fixnum
]
=> 0
Il peut également être utile d’exclure les méthodes héritées de Object
.
(Fixnum.public_instance_methods - Object.public_instance_methods).sort
=> [:%, :&, :*, :**, :+, :+@, :-, :-@, :/, :<, :<<, :<=, :>, :>=, :>>, :[], :^, :abs, :abs2, :angle, :arg, :between?, :ceil, :chr, :coerce, :conj, :conjugate, :denominator, :div, :divmod, :downto, :even?, :fdiv, :floor, :gcd, :gcdlcm, :i, :imag, :imaginary, :integer?, :lcm, :magnitude, :modulo, :next, :nonzero?, :numerator, :odd?, :ord, :phase, :polar, :pred, :quo, :rationalize, :real, :real?, :rect, :rectangular, :remainder, :round, :singleton_method_added, :size, :step, :succ, :times, :to_c, :to_f, :to_i, :to_int, :to_r, :truncate, :upto, :zero?, :|, :~]
ou peut-être plus lisible:
(Fixnum.public_instance_methods - Object.public_instance_methods).sort.join(" ")
=> "% & * ** + +@ - -@ / < << <= > >= >> [] ^ abs abs2 angle arg between? ceil chr coerce conj conjugate denominator div divmod downto even? fdiv floor gcd gcdlcm i imag imaginary integer? lcm magnitude modulo next nonzero? numerator odd? ord phase polar pred quo rationalize real real? rect rectangular remainder round singleton_method_added size step succ times to_c to_f to_i to_int to_r truncate upto zero? | ~"
Une méthode facile qui fonctionne presque hors de la boîte est:
require 'yaml'
y (5.methods - Object.methods).sort
Vous pouvez également créer un fichier .irbrc contenant ces méthodes pour plus de commodité:
require 'yaml'
def yppo(obj)
y((obj.methods - Object.methods).sort)
end
def yppc(obj)
y((obj.methods - Class.methods).sort)
end
Alors c'est aussi simple que yppo(5)
.
Une autre astuce que j'utilise habituellement est de grep pour les méthodes:
y (5.methods - Object.methods).sort.grep /to_/
En fait, vous avez répondu à votre propre question:
require 'pp'
pp 5.methods
[:to_s,
:-@,
:+,
:-,
:*,
:/,
:div,
:%,
:modulo,
:divmod,
:fdiv,
:**,
:abs,
:magnitude,
:==,
:===,
:<=>,
etc
Bonjour c'est une réponse simple
5.methods.each {|x| p x}
Maintenant l'explication. "5" est le "numéro" et peut être n'importe quel autre Interger ...... ". Methods" Ceci appellera une liste de toutes les méthodes qui s'appliquent au nombre ...... ". each {| x | px}" Ceci affichera dans une liste toutes les méthodes.
J'espère que ça aide.