En lisant le code ruby
Parfois, j'utilise un débogueur.
Cependant, dans de rares cas, je voulais entrer dans une méthode, mais la description que je pensais être un argument de cette méthode était en fait un autre appel de méthode, et je ne pouvais pas comprendre l'arbre des appels.
À ce moment-là, source_location qui se développe dans class Method
J'ai finalement eu l'idée d'utiliser la méthode, alors notez-la.
Un exemple de recherche de la cause d'une tentative de remplacement du client redis utilisé dans ʻActiveSupport :: Cache :: RedisCacheStorepar un simulacre lorsque rspec est exécuté, mais la méthode
with` est manquante.
Ligne 345 devient method_missing avec redis.with. En regardant la gemme redis, il semble que «avec» ne soit pas défini. Je me demande quoi.
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)
Arrêtez de remplacer la maquette, réexécutez et essayez d'afficher la source.
[1] pry(#<ActiveSupport::Cache::RedisCacheStore>)> redis.method(:with).source
=> " def with\n yield self\n end\n"
Quelle est cette méthode?
Dans un tel cas, 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]
C'est ici? https://github.com/rails/rails/blob/fbe2433be6e052a1acac63c7faf287c52ed3c5ba/activesupport/lib/active_support/cache/redis_cache_store.rb#L24-L26
Est-il facile à utiliser en incluant ConnectionPoolLike
et en appliquant un correctif à Redis
?
Je me demande si je dois inclure ConnectionPoolLike
dans le client redis qui est branché avec un simulacre.
Si l'implémentation d'ActiveSupport change, je me demande si je peux la suivre correctement.
Comme.
Q
Si les classes sont ouvertes à divers endroits et que le comportement peut être modifié, il peut être difficile de le remarquer simplement en lisant la source. Fini.