Ответ 1
Попробуйте pry. Существует railscast об этом (выпущен на этой же неделе!), И он показывает вам, как показывать код с помощью show-method
.
Если я определяю метод в IRB, есть ли способ просмотреть его источник позже в сеансе?
> def my_method
> puts "hi"
> end
Несколько экранов вывода позже я хотел бы написать что-то вроде
> source my_method
и вернитесь:
=> def my_method; puts "hi"; end;
Возможно ли это?
Попробуйте pry. Существует railscast об этом (выпущен на этой же неделе!), И он показывает вам, как показывать код с помощью show-method
.
Не в IRB, но в Pry эта функция встроена.
Вот:
pry(main)> def hello
pry(main)* puts "hello my friend, it a strange world we live in"
pry(main)* puts "yes! the rich give their mistresses tiny, illuminated dying things"
pry(main)* puts "and life is neither sacred, nor noble, nor good"
pry(main)* end
=> nil
pry(main)> show-method hello
From: (pry) @ line 1:
Number of lines: 5
def hello
puts "hello my friend, it a strange world we live in"
puts "yes! the rich give their mistresses tiny, illuminated dying things"
puts "and life is neither sacred, nor noble, nor good"
end
pry(main)>
Если вы используете Ruby 1.9.2 и более новую версию sourcify gem, чем доступно на Rubygems.org(например, создайте источник от GitHub), вы можете сделать это:
>> require 'sourcify'
=> true
>>
.. class MyMath
.. def self.sum(x, y)
.. x + y # (blah)
.. end
.. end
=> nil
>>
.. MyMath.method(:sum).to_source
=> "def sum(x, y)\n (x + y)\nend"
>> MyMath.method(:sum).to_raw_source
=> "def sum(x, y)\n x + y # (blah)\n end"
Изменить: также выйдите method_source, что и использует pry внутри.
Что я использую method_source У меня есть код метода, который в основном является моей оболочкой для этого драгоценного камня. Добавьте метод method_source в приложения Gemfile for Rails. И создайте инициализатор со следующим кодом.
# Takes instance/class, method and displays source code and comments
def code(ints_or_clazz, method)
method = method.to_sym
clazz = ints_or_clazz.is_a?(Class) ? ints_or_clazz : ints_or_clazz.class
puts "** Comments: "
clazz.instance_method(method).comment.display
puts "** Source:"
clazz.instance_method(method).source.display
end
Использование:
code Foo, :bar
или с экземпляром
code foo_instance, :bar
Улучшенный подход состоит в том, чтобы иметь класс в папке /lib с расширением irb, чем вы просто требуете его в одном из инициализаторов (или создать свой собственный)