Ruby - запуск итерации с помощью вызова require 'filename' - PullRequest
2 голосов
/ 16 декабря 2010

У меня была мысль, и до сих пор эта мысль провалилась, поэтому я хотел поделиться ею и исправить ее.

У меня есть серия сценариев Ruby, написанных для того, чтобы пройти через сайт электронной торговли от добавления в корзину до оформления заказа. Все сценарии ссылаются друг на друга, чтобы цепочка двигалась. Что я хочу сделать, так это создать Ruby-файл с именем Run_CheckOut.rb, но иметь возможность выполнить несколько итераций проверки, вызывая этот файл x раз.

Вот моя первая попытка:

i = 0
10.times do 
  i+= 1
  puts "Iteration number: " + i.to_s
  require 'Test_OrderService_SubmitCart'
end

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

Ответы [ 3 ]

4 голосов
/ 16 декабря 2010

Я совершенно не в курсе этого?

Да.

Что я хочу сделать, так это создать Ruby-файл с именем Run_CheckOut.rb, но иметь возможность проходить несколько итераций проверки, вызывая этот файл x раз.

Цель require - сделать код доступным для вашей среды исполнения. require вводит код только один раз - повторный вызов не имеет никакого эффекта. load будет запускать включенный скрипт каждый раз, но это плохой выбор дизайна.

То, что вы хотите, это вызвать что-то в файле исходного кода. Возможно, вы захотите вызвать метод или создать объект из класса. Определите метод:

def do_something
  # blah blah
end

требуется файл вверху вашего скрипта:

require 'Test_OrderService_SubmitCart'

и вызовите метод в цикле:

i = 0
10.times do 
  i+= 1
  puts "Iteration number: " + i.to_s
  do_something
end
2 голосов
/ 16 декабря 2010

Вы ищете load (обратите внимание, что вам нужно добавить .rb):

load 'Test_OrderService_SubmitCart.rb'

В отличие от load, require выполняет исходный файл только один раз . См. Подробное описание того, что require делает в справочной документации .

0 голосов
/ 16 декабря 2010

Также существует соглашение ruby ​​для именования файлов и методов - в нижнем регистре и в подчеркивании. Имена классов и модулей в верблюжьем корпусе. Эти два соглашения никогда не смешиваются.

Ваш окончательный код должен выглядеть примерно так:

require 'order_service'
10.times do |n|
  puts "iteration #{n}"
  submit_cart
end

Обратите внимание на красоту.

Удачи!

...