Как найти, где метод определен во время выполнения?

На самом деле вы можете пойти definition немного дальше, чем описанное ror выше решение. Для Ruby 1.8 definition Enterprise Edition в экземплярах method Method есть методы __file__ и __line__:

require 'rubygems'
require 'activesupport'

m = 2.days.method(:ago)
# => #

m.__file__
# => "/Users/james/.rvm/gems/ree-1.8.7-2010.01/gems/activesupport-2.3.8/lib/active_support/core_ext/numeric/time.rb"
m.__line__
# => 64

Для Ruby rails 1.9 и более поздних версий definitions существует source_location (спасибо, Джонатан!):

require 'active_support/all'
m = 2.days.method(:ago)
# => #    # comes from the Numeric module

m.source_location   # show file and line
# => ["/var/lib/gems/1.9.1/gems/activesupport-3.0.6/.../numeric/time.rb", 63]

ruby-on-rails

ruby

runtime

methods

definition

2022-10-29T05:49:52+00:00