Если вы используете платформу тестирования, например Mocha , с библиотекой утверждений Chai , вы можете использовать равенство deep для сравнения массивов.
expect(a1).to.deep.equal(a2)
Это должно возвращать true, только если массивы имеют равные элементы в соответствующих индексах.
Технически, это действительно не имеет значения. require
просто нормальный вызов метода, и объем, он призван, не влияет, как он работает. Размещение единственной разницы делает, то, что оно будет выполняться, когда независимо от того, что код, в который оно помещается, будет оценен.
В сущности необходимо поместить их в вершину, таким образом, люди видят зависимости файла сразу. Это - традиционное место для него.
Действительно не имеет значения, куда Вы помещаете их, но если Вы помещаете их внутренний class
или module
выражение, тогда похоже, что Вы импортируете то, что находится в require
d файл в пространство имен класса, которое не верно: все заканчивается в глобальном пространстве имен (или независимо от того, что пространства имен определяются в библиотеке ).
Так, лучше помещает их наверху для предотвращения любого беспорядка.
Наверху файла большинство (но не все) дескриптор языков импортирует этот путь. Я нахожу его намного более чистым и легче обработать их этот путь.
я думаю, что это только имеет смысл, этот путь действительно... как Вы получает середину пути в файле тогда:
class Foo
def initialize(init_value)
@instance_var = init_value
# some 500 lines of code later....
end
end
class Bar
# oh look i need an import now!
require 'breakpoint'
, как Вы видите, было бы очень трудно отследить их. Не говоря уже о том, если бы Вы хотели использовать импортированные функции ранее в Вашем коде , то необходимо было бы, вероятно, отследить в обратном порядке и включать его снова, потому что другой импорт будет характерен для того класса. Импорт тех же файлов создал бы много издержек во время времени выполнения также.
наверху.
require 'rubygems'
require 'fastercsv'
class MyClass
# Do stuff with FasterCSV
end
Я вижу, что возможная причина для того, чтобы не помещать a require
наверху файла: где дорого загрузиться и не всегда выполняемое. Один случай, который происходит со мной, - то, где, например, код и его тесты находятся в том же файле, который является чем-то, что мне нравится делать время от времени для маленького кода библиотеки в частности. Затем я могу петлять от своего редактора и тестового прогона. В этом случае, когда файл require
d в откуда-либо, я не хочу test/unit
быть загруженным.
Что-то немного как это:
def some_useful_library_function()
return 1
end
if __FILE__ == $0
require 'test/unit'
class TestUsefulThing < Test::Unit::TestCase
def test_it_returns_1
assert_equal 1, some_useful_library_function()
end
end
end