Вы можете легко получить исходный код метода в Ruby.
Представьте себе следующую гипотетическую класс:
class Klass
def self.foo
:foo
end
def bar
:bar
end
end
Как вы можете видеть, этот класс имеет два метода:
- метод класса .foo
- метод экземпляра #bar
Использовать .method
и .instance_method
для доступа к программе матический:
m1 = Klass.method :foo
=> #<Method: Klass.foo>
m2 = Klass.instance_method :bar
=> #<UnboundMethod: Klass#bar>
Вы можете использовать метод .source
, чтобы просмотреть их исходный код:
puts m1.source
def self.foo
:foo
end
=> nil
puts m2.source
def self.bar
:bar
end
=> nil
Поскольку рубин есть открытые классы и динамические нагрузки, вы можете также добавить или методов изменения во время выполнения. Просто повторно открыть класс и переопределить метод:
Klass.foo
=> :foo
class Klass
def self.foo
:foobar
end
end
Klass.foo
=> :footer
Другие методы, определенные ранее в классе останется неизменным:
Klass.bar
=> :bar
ПРЕДУПРЕЖДЕНИЕ: поведение класса переосмысление во время выполнения (также называемый " Monkey Patching ") - очень мощный инструмент, он также может быть несколько опасным. Текущие версии Ruby поддерживают гораздо более контролируемый способ обойти это под названием «уточнения».
Вы можете learn more about using refinements here
Смотрите аналогичные вопросы по Stackoverflow: http://stackoverflow.com/questions/4740684/ruby-get-source-code или http://stackoverflow.com/questions/3393096/how -can-i-get-source-code-of-the-methods-dynamic-and-also-which-file-is-this-m или http://stackoverflow.com/questions/4719649/ruby-print-source -код или http://stackoverflow.com/questions/1164903/find-the-source-of-eval-code ... – mliebelt