[RUBY] Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?

Einführung

Beim Lesen des Ruby-Codes

Manchmal benutze ich einen Debugger.

Es war jedoch selten, dass ich in eine Methode einsteigen wollte, aber die Beschreibung, die ich für ein Argument dieser Methode hielt, war tatsächlich ein anderer Methodenaufruf, und ich konnte den Aufrufbaum nicht verstehen.

Zu diesem Zeitpunkt wächst source_location in class Method Ich kam schließlich auf die Idee, die Methode anzuwenden, also notieren Sie sie sich.

Brechen

Ein Beispiel für die Untersuchung der Ursache eines Versuchs, den in ActiveSupport :: Cache :: RedisCacheStore verwendeten Redis-Client durch einen Mock zu ersetzen, wenn rspec ausgeführt wird, aber die Methode with fehlt.

Zeile 345 wird mit redis.with method_missing. Wenn man sich das Redis-Juwel ansieht, scheint es, dass "mit" nicht definiert ist. I frage mich, was.

From: /bundle/gems/activesupport-6.0.3.2/lib/active_support/cache/redis_cache_store.rb:344 ActiveSupport::Cache::Strategy::LocalCache#read_entry:

    339:         # Store provider interface:
    340:         # Read an entry from the cache.
    341:         def read_entry(key, **options)
    342:           failsafe :read_entry do
    343:             binding.pry
 => 344:             raw = options&.fetch(:raw, false)
    345:             deserialize_entry(redis.with { |c| c.get(key) }, raw: raw)
    346:           end
    347:         end
    348:
    349:         def read_multi_entries(names, **options)

Beenden Sie das Ersetzen des Modells, führen Sie es erneut aus und versuchen Sie, die Quelle anzuzeigen.

[1] pry(#<ActiveSupport::Cache::RedisCacheStore>)> redis.method(:with).source
=> "      def with\n        yield self\n      end\n"

Was ist diese Methode? In einem solchen Fall source_location!

[2] pry(#<ActiveSupport::Cache::RedisCacheStore>)> redis.method(:with).source_location
=> ["/bundle/gems/activesupport-6.0.3.2/lib/active_support/cache/redis_cache_store.rb", 24]

Ist es hier? https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/activesupport/lib/active_support/cache/redis_cache_store.rb#L24-L26

Ist es einfach zu bedienen, indem Sie "ConnectionPoolLike" einfügen und einen Patch auf "Redis" anwenden? Ich frage mich, ob ich "ConnectionPoolLike" in den Redis-Client aufnehmen muss, der mit einem Mock verbunden ist. Wenn sich die Implementierung von ActiveSupport ändert, frage ich mich, ob ich sie ordnungsgemäß befolgen kann.

Mögen.

Q

Wenn Klassen an verschiedenen Orten geöffnet werden und das Verhalten geändert werden kann, kann es schwierig sein, dies nur durch Lesen der Quelle zu bemerken. Fertig.

Recommended Posts

Was tun, wenn Sie die Quellposition wissen möchten, an der die Methode in bind.pry definiert ist?
Was ist CHECKSTYLE: OFF in der Java-Quelle? Checkstyle zu wissen von
Was tun, wenn der Vorgang nicht zulässig ist, wenn ein Befehl im Terminal ausgeführt wird?
Was ist ... (3 Punkte) in der Java-Quelle gefunden? Argument mit variabler Länge, von dem man wissen muss
Was ist zu tun, wenn in Eclipse "Fehler beim Laden der gemeinsam genutzten JNI-Bibliothek" angezeigt wird?
Was tun, wenn die Methode in f: ajax nicht gefunden wurde?
[Rails Tutorial Kapitel 2] Was tun, wenn Sie einen Fehlern im Spaltennamen machen?
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
ProxyFactory ist praktisch, wenn Sie AOP mit Spring testen möchten!
Was tun, wenn die Änderungen im Servlet nicht berücksichtigt werden?
Was tun, wenn Cloud 9 im Rails-Lernprogramm voll ist?
Was tun, wenn Sie Ihr Root-Passwort unter CentOS7 vergessen haben?
[Swift] Wenn Sie wissen möchten, ob die Anzahl der Zeichen in String mit einer bestimmten Anzahl übereinstimmt ...
Ich möchte die Methode des Controllers kennen, bei der die Ausnahme im ExceptionHandler von Spring Boot ausgelöst wurde
Was tun, wenn javax.el.ELException: Kein gültiger Methodenausdruck: wird angezeigt, wenn der JSF-Bildschirm angezeigt wird
Was ist die Hauptmethode in Java?
undefinierte Methode Was tun, wenn Sie "user_signed_in" erhalten?
[IOS] Was tun, wenn das Bild mit einer Farbe gefüllt ist?
Was tun, wenn das Präfix c in JSP nicht gebunden ist?
Was tun, wenn der Tomcat-Prozess bestehen bleibt, wenn Sie Tomcat in Eclipse stoppen?
[RSpec] Wenn Sie die Instanzvariable des Controllers im Test verwenden möchten [Zuweisungen wird nicht empfohlen]
Das erste, was Sie tun müssen, wenn Sie mit Heroku auf GitHub mit Eclipse auf Java zufrieden sein möchten
Was tun beim Debuggen von "Quelle nicht gefunden"?
Was verwenden Sie beim Konvertieren in String?
Was tun, wenn in PlayFramework eine IllegalStateException auftritt?
Was tun, wenn Sie glauben, dass Sie mit IntelliJ IDEA CE nicht Groovy-> Java können?
Was tun, wenn der Wert im zweiten getSubmittedValue () in JSF Validator null wird?
Möglicherweise möchten Sie die Methode remove in ArrayList nicht sehr oft verwenden
Androd: Was tun gegen "The Realm befindet sich bereits in einer Schreibtransaktion in"
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten
[Rails] Ich möchte alles zurücksetzen, weil die Daten in der lokalen Umgebung falsch sind! Was ist vorher zu tun?
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?
Was tun, wenn das SSL-Zertifikat abgelaufen ist?
Was tun, wenn Sie den Text eines Elements in Selen nicht abrufen können?
Was tun, wenn die bereits verwendete Adresse nach dem Ausführen der Schienen angezeigt wird?
Wenn Sie Annotation in Java 8 dynamisch ersetzen möchten
ParseException: Was tun, wenn ein nicht analysierbares Datum erreicht ist?
[Maven] Was tun, wenn Sie aufgefordert werden, ein Glas, das sich nicht im Remote-Repository befindet, in den Krieg aufzunehmen?
[Witz] Was tun, wenn bei Verwendung von Mixxx unter Ubuntu 20.04 die ungültige Abtastrate erreicht ist?
[Rails] Was tun, wenn Sie versehentlich eine Bundle-Installation in einer Produktionsumgebung in Ihrer lokalen Umgebung durchführen?
Verwenden Sie JLine, wenn Sie Tastenanschläge auf der Konsole zeichenweise in Java verarbeiten möchten
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
Wenn Sie die Hauptzweiginformationen in dem aktuellen Zweig wiedergeben möchten, an dem Sie gerade arbeiten
Was tun, wenn in GlassFish eine java.io.IOException auftritt?
Was ist zu tun, wenn Ausdrucksoperatoren nicht auf die Methodenbindung angewendet werden können?
Delicate ist praktisch, wenn Sie Teile wiederverwenden möchten
Was tun, wenn der Befehl Rails unbrauchbar wird?
Was ist die Zupfmethode?
Was ist die Initialisierungsmethode?
Was tun, wenn "Relation" hibernate_sequence "nicht existiert" in der ID-Spalte von PostgreSQL + JPA
[Rails] Was tun, wenn der Fehler Keine Datenbank ausgewählt und Unbekannte Datenbank in db: migrate angezeigt wird?
[Programmieranfänger] Was tun, wenn Schienen zu einem Fehler in der lokalen Entwicklungsumgebung werden?