En this answer to a separate question, je dit que si vous faitesComment puis-je suivre la création de chaînes dans Ruby?
name = "Rohit " "Sharma"
vous ne créez deux String
objets avec le contenu "Rohit "
et "Sharma"
qui se combinent pour créer un nouvel objet String avec le contenu "Rohit Sharma"
, mais que vous créez seulement un seul objet String pour commencer.
Mais c'est seulement un livre qui me dit cela, plutôt que de le vérifier manuellement.
Comment seriez-vous en mesure d'enregistrer la création d'une chaîne?
J'ai essayé d'utiliser
set_trace_func proc { |event, file, line, id, binding, classname|
printf "%8s %s:%-2d %10s %8s\n", event, file, line, id, classname
}
string = "Insert content here"
Mais seulement obtenu
c-return -:3 set_trace_func Kernel
line -:5
et "Programmation Ruby 1.9" (la Pioche) dit que la modification Class#new
ne fonctionnerait pas pour les chaînes, car ils sont construits sans utiliser new
.
Je suis d'accord que l'enchaînement se passe au moment de l'analyse, mais ne la création de l'objet Chaîne concaténée se produit lors de l'exécution? –
@Andrew Grimm: Probablement. Notez cependant que la création d'objet n'est pas l'un des 8 événements que vous pouvez tracer. Vous pouvez uniquement suivre l'appel d'une méthode Ruby, revenir d'une méthode Ruby, appeler une opération native (fonction C dans MRI, YARV, méthode C++ dans Rubinius, etc.), retourner d'une opération native, début d'une définition de module, fin de une définition de module, levant une exception et exécutant une ligne. –