Je viens de commencer à apprendre des métaprogramming rubis. Regarder l'objet.Methods I Obtenir:
Object.methods => [ :allocate, :new, :superclass, :freeze, :===, :==, :<=>, :<, :<=, :>, :>=, :to_s, :included_modules, :include?, :name, :ancestors, :instance_methods, :public_instance_methods, :protected_instance_methods, :private_instance_methods, :constants, :const_get, :const_set, :const_defined?, :const_missing, :class_variables, :remove_class_variable, :class_variable_get, :class_variable_set, :class_variable_defined?, :module_exec, :class_exec, :module_eval, :class_eval, :method_defined?, :public_method_defined?, :private_method_defined?, :protected_method_defined?, :public_class_method, :private_class_method, :autoload, :autoload?, :instance_method, :public_instance_method, :nil?, :=~, :!~, :eql?, :hash, :class, :singleton_class, :clone, :dup, :initialize_dup, :initialize_clone, :taint, :tainted?, :untaint, :untrust, :untrusted?, :trust, :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, :__id__, :object_id, :to_enum, :enum_for, :equal?, :!, :!=, :instance_eval, :instance_exec, :__send__]
3 Réponses :
Voici la meilleure réponse de Ce Page:
Crochets liés à la méthode strong> p> coerce
induced_from
to_xxx
Notez que ce sont d'excellents crochets, mais n'incluent pas de choses comme instance_eval code> ou
définir_method code>.
En regardant la liste ci-dessus, vous devriez être capable d'identifier les méthodes "réflexion" qui peuvent être utilisées pour interroger et manipuler les constantes, les méthodes, les variables d'instance, etc. Ensuite, il y a le alors il y a l'interpréteur "hameçons" comme Comprenez que bien qu'ils aient un comportement spécial, des classes et des modules ne sont que des objets et vous pouvez les créer de manière dynamique, les stocker dans des structures de données, etc. Ils n'ont même pas besoin d'avoir des noms. Vous pouvez simplement appeler Comprendre les blocs et la Lambdas bien est important à la fois pour la programmation générale de rubis et pour le métaprogramming en particulier. P> objet code> est une classe, la plupart des méthodes que vous avez répertoriées sont en réalité des méthodes d'instance code> de classe code>. Regardez aussi à
objet.private_methods code> - Vous trouverez
définir_method code> là-bas, ce qui est absolument essentiel. Mais
Binding Code> est très puissant aussi ... Lorsque vous apprenez à propos de Ruby MetaProgramming, vous voudrez examiner les docs pour la catégorie code> liant code>. Le
envoyer code>,
__ envoyer __ code> et
public_send code> la famille est également essentiel. P>
eval code> et
exec code> méthodes.
Méthode_MISSING CODE> est l'un des premiers que vous apprenez, mais faites attention à
const_missing code> aussi. Assurez-vous de vérifier
set_trace_func code> et
trace_var code>. Et où serions-nous sans
alias code> et
alias_method code>? P>
méthody_added code>,
méthod_removed code>,
méthod_undefinefin code>,
hérité code>,
étendu code>,
inclus code>,
singleton_method_added code>,
singleton_method_removed code>,
singleton_method_undefined code>,
instance_method_added code >,
instance_method_removed code> et
instance_method_undefined code>. p>
Methode d'objet code> est essentiel pour obtenir
méthode code> objets. Regardez toutes les méthodes de
méthode code>, y compris des éléments tels que
propriétaire code>.
Le noyau # appelant code> peut être utile parfois. Ensuite, recherchez également la classe code> ObjectSpace CODE>. P>
class.new code> pour en faire un nouveau et utiliser
class_eval code>,
définir_method code>, etc., au besoin pour y ajouter des méthodes. < / p>
__ ligne __ code> et
__ fichier __ code> peut être intéressant, en particulier
fichier.read (__ fichier __) p>. p>.
Dans le livre "MetaProgramming Ruby", l'auteur indique qu'il n'y a pas de ligne ferme entre les métaprogramming et la programmation. Tout simplement la programmation. P>
Quelques exemples que je peux penser qui sont quelque peu intermédiaires entre la programmation et le métaprogramming sont class code> et
attr_reader code>. p>.
Si MetaProgramming Ruby est un intérêt sérieux, je vous recommande fortement le Book Ruby MetaProGrumming par Paolo Perrotta .