Добавление каталога к $LOAD_PATH (Ruby)

Попробуйте использовать вычисленные стили:

window.getComputedStyle(document.getElementById("X")).backgroundColor
90
задан Andrew Grimm 5 January 2012 в 22:28
поделиться

4 ответа

Я бы сказал, пойти с $ :. unshift File.dirname (__ FILE __) поверх другого, просто потому, что я видел гораздо большее использование этого в коде, чем $ LOAD_PATH , и он тоже короче!

49
ответ дан 24 November 2019 в 06:57
поделиться

I'm not too fond on the 'quick-and-dirty' way. Anyone new to Ruby will be pondering what $:. is.

I find this more obvious.

libdir = File.dirname(__FILE__)
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)

Or if I care about having the full path...

libdir = File.expand_path(File.dirname(__FILE__))
$LOAD_PATH.unshift(libdir) unless $LOAD_PATH.include?(libdir)

UPDATE 2009/09/10

As of late I've been doing the following:

$:.unshift(File.expand_path(File.dirname(__FILE__))) unless
    $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))

I've seen it in a whole bunch of different ruby projects while browsing GitHub.

Seems to be the convention?

22
ответ дан 24 November 2019 в 06:57
поделиться

Путь загрузки Ruby очень часто записывается как $:, но то, что он короткий, не улучшает его. Если вы предпочитаете ясность уму или если краткость сама по себе вызывает у вас зуд, вам не нужно делать это только потому, что все остальные. Передайте привет ...

$LOAD_PATH

... и попрощайтесь с ...

# I don't quite understand what this is doing...
$:
146
ответ дан 24 November 2019 в 06:57
поделиться

Если вы наберете script / console в своем проекте Rails и введете $: , вы получите массив, который включает все каталоги, необходимые для загрузить Ruby. Вывод из этого небольшого упражнения состоит в том, что $: - это массив. В таком случае вы можете выполнять с ним функции, такие как добавление других каталогов в начало с помощью метода unshift или оператора << . Как вы подразумевали в своем заявлении, $: и $ LOAD_PATH - это одно и то же.

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

Пример:

У меня есть созданный мной плагин, который называется todo. Моя директория имеет такую ​​структуру:

/---vendor
  |
  |---/plugins
        |
        |---/todo
              |
              |---/lib
                    |
                    |---/app
                          |
                          |---/models
                          |---/controllers
              |
              |---/rails
                    |
                    |---init.rb

В файле init.rb я ввел следующий код:

## In vendor/plugins/todo/rails/init.rb
    %w{ models controllers models }.each do |dir|
      path = File.expand_path(File.join(File.dirname(__FILE__), '../lib', 'app', dir))
      $LOAD_PATH << path
      ActiveSupport::Dependencies.load_paths << path
      ActiveSupport::Dependencies.load_once_paths.delete(path)
    end 

Обратите внимание, как я говорю блоку кода выполнять действия внутри блока со строками «модели», «контроллеры» и «модели», где я повторяю «модели». (К вашему сведению, % w {...} - это просто еще один способ указать Ruby, что нужно хранить массив строк). Когда я запускаю скрипт / консоль , я набираю следующее:

>> puts $:

И я набираю его, чтобы было легче читать содержимое строки. В результате я получаю:

...
...
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/models
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/controllers
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/models

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

Если вы опытный программист на Rails, вы, вероятно, имеете очень хорошее представление о том, что вы делаете. повторять и, вероятно, не совершить ошибку, повторяя пути. Если вы новичок, я бы пошел дальше, пока вы действительно не поймете, что делаете.

8
ответ дан 24 November 2019 в 06:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: