Динамически требующие файлы? - PullRequest
19 голосов
/ 09 февраля 2010

Кто-нибудь знает достаточно о Ruby's require, чтобы сказать мне, если следующий синтаксис допустим:

class Something

  def initialize(mode)
     case mode
     when :one then require 'some_gem'
     when :two then require 'other_gem'
     end
  end

end

s = Something.new

Если это так, require поместит камень в глобальное пространство имен, как это было бы в верхней части файла?

Ответы [ 2 ]

16 голосов
/ 09 февраля 2010

Если это так, потребует ли место драгоценный камень в глобальное пространство имен, как тот же требуется в верхней части файла будет?

Да. require не имеет области действия, в то время как load имеет.

5 голосов
/ 09 февраля 2010

Да, он полностью действителен и работает, как и ожидалось, поскольку требование не ограничено

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

Область локального метода не будет затронута, и любое определение класса и т. Д. Будет в ожидаемой области действия

...