2016-06-02 3 views
5

Моя основная цель - уметь понимать библиотеку/драгоценный камень, который я использую, полностью. Я пробовал читать исходный код от начала до конца на Github, но это было очень сложно.Исходный код Ruby

Я подумал, что более приятный и более мягкий шаговый камень будет просто читать исходный код каждого метода библиотеки/драгоценного камня, когда я его использую.

Например, я хочу знать, как метод redirect_to в Ruby On Rails работает:

  1. Как я могу посмотреть исходный код метода redirect_to?
    • Я знаю, что в pry я могу сделать что-то вроде show-method method, но как это сделать для методов в Rails-инфраструктуре?
  2. Есть ли у вас какие-либо предложения относительно того, как я могу лучше понять драгоценные камни и их API? Просто чтение исходного кода кажется очень трудным, особенно для фреймворков.

Thank you!

+1

«как я могу это сделать для методов в rails framework» - точно так же. Методы - это методы. –

+0

Извините, я не понимаю ваш ответ полностью, вы предлагаете мне сделать это 'show-method redirect_to' например? Если это так, я не уверен, как я буду загружать необходимые модули в сеанс pry. –

+0

«Как я буду загружать нужные модули» - просто сделайте это в консоли рельсов. Установите точку останова ('binding.pry') где-нибудь в контроллере, нажмите ее (посетив соответствующий URL-адрес в вашем браузере), а затем сделайте' show-source redirect_to'. –

ответ

4

RubyMine IDE удовлетворяет эту потребность для меня. Она имеет следующие особенности, которые значительно снижают барьер для чтения источника гем:

  • Драгоценные камни являются частью дерева проекта (в псевдо-каталог внешних библиотек), так что вы можете перемещаться и даже редактировать их так же, как если бы ваш собственный код.

  • Одна ключевая команда (команда -B на Mac) выполняет переход от идентификатора (имя модуля/класса, имя метода и т. Д.) К его объявлению или создает список на выбор, если имеется несколько объявлений.Он работает как для вашего кода, так и для кода драгоценного камня.

  • Другая команда (опция-команда-O на Mac) позволяет ввести имя идентификатора для перехода к следующему, как указано выше. Он автоматически включает библиотечный код, если введенный вами код не найден в вашем коде; если то, что вы вводите, найдено в вашем коде, вы можете нажать клавиши еще раз, чтобы включить код драгоценного камня в любом случае.

  • Отладчик постоянно отображает код, который вы выполняете. Вы можете установить точку останова без редактирования кода, в котором вы хотите. Вы можете проверить любой стек стека выше того, который фактически выполняется. Все эти функции одинаково хорошо работают с кодом и кодом драгоценных камней.

В целом RubyMine имеет все функции с кодом драгоценных камней, а также с кодом проекта.

Что касается методов понимания драгоценных камней, кроме чтения их исходного кода: большинство драгоценных камней задокументированы в их README (которые я неизменно читаю на Github) и, возможно, в других файлах документации в корневом каталоге или в каталоге doc. Некоторые драгоценные камни (включая драгоценные камни Rails) имеют rdoc, который стоит прочитать. Однако, так как это удобно для перехода от использования драгоценного камня к его коду, я обычно стараюсь это первым и читаю rdoc (если он есть) в коде, прежде чем я прочитаю фактический код. RubyMine также может отображать rdoc для идентификатора, где он используется (F1 на Mac), но мне всегда было проще просто перейти прямо к коду.

+0

Звучит здорово, я помню такие функции, когда я использовал RubyMine IDE, но, к сожалению, он заплачен, а сломанный колледж, такой как я, не может позволить себе что-то подобное прямо сейчас ... –

+0

Я думаю, что это того стоит, проводя значительное программирование времени. Тем не менее, способы бесплатного использования включают бесплатную пробную версию [лицензию с открытым исходным кодом] (https: //www.jetbrains.com/buy/opensource /) и выиграть лицензию в лотерее группы пользователей/meetup, которую я сделал три раза! –

+0

ahah Тогда я посмотрю. И спасибо за советы с IDE, я обязательно вернусь к этому, если у меня когда-нибудь появится IDE. –

2

Мой первый подход при попытке научиться использовать драгоценный камень - это написать тесты против него.

Роберт C. Мартин пишет:

Изучение стороннего кода трудно. Также сложно интегрировать сторонний код. Выполнение обоих одновременно вдвойне. Что, если мы примем другой подход? Вместо экспериментируя и тестируя новые материалы в нашем производственном коде, мы могли бы написать некоторые тесты , чтобы изучить наше понимание стороннего кода. Джим Ньюкирк называет такие тесты учебных тестов.

В обучающих тестах мы называем сторонний API, как и ожидаем использовать его в нашем приложении. Мы занимаемся контролируемыми экспериментами, которые проверяют наше понимание этого API. В тестах основное внимание уделяется тому, что мы хотим от API.

Чтение исходного кода происходит после того, как вы действительно обеспокоены работой внутренних органов.

Надеюсь, это поможет!

А где redirect_to определяется в ActionController :: Перенаправление

https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/actionpack/lib/action_controller/metal/redirecting.rb

+0

Я вижу благодарность за идею! Я ценю, что вы даете мне прямой ответ, но есть ли методический способ найти исходный код для методов? –

+0

Увы, у меня нет методического метода. – floum

2

Если вы можете получить код в контроллер это часто является более информативным:

raise method(:redirect_to).source_location.inspect 

Это покажет вам, где именно был определен метод.

При работе с большими кодовыми базами, как это я обычно опираются на git довольно трудно:

git grep 'def redirect_to' 

Если это не поворачивает вверх ничего:

git grep 'redirect_to' 

Вам может понадобиться фильтровать более осторожно, но часто реализация выглядит визуально.

Хорошая вещь о коде Ruby - это вообще вполне читаемый и поиск по нему часто приятнее, чем на других языках.

Смежные вопросы