2013-09-01 4 views
0

В настоящее время у меня есть система, которая включает в себя довольно много новых экземпляров класса, поэтому мне пришлось назначать их с помощью массива, как было предложено здесь: Create and initialize instances of a class with sequential namesСоздание новых экземпляров класса внутри массива без перезаписывания существующих

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

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

E2A: Игнорируйте глобальные переменные, они просто для тестирования.

$allids = [] 
$position = 0 ## Set position for each iteration 

    $ids.each do |x| ## For each ID, do 
     $allids = ($ids.length).times.collect { MyClass.new(x)} ## For each ID, make a new class instance, as part of an array 

     $browser.goto("http://www.foo.com/#{x}") ## Visit next details page 

     thestatus = Nokogiri::HTML.parse($browser.html).at_xpath("html/body/div[2]/div[3]/div[2]/div[3]/b/text()").to_s ## Grab the ID's status 

     theamount = Nokogiri::HTML.parse($browser.html).at_xpath("html/body/div[2]/div[3]/div[2]/p[1]/b[2]/text()").to_s ## Grab a number attached to the ID 

     $allids[$position].getdetails(thestatus, theamount) ## Passes the status to getdetails 

     $position += 1 ## increment position for next iteration 
    end 

e2a2: Собираюсь вставьте из моего комментария:

Хм, я просто думал, я начал, сделав предыдущие значения сваливать в другую переменную, то другой переменной захватывает новые значения, и перебирает над ними, чтобы увидеть, соответствуют ли предыдущие значения. Это довольно грязный способ сделать это, хотя, я думал, будет self.create с || = работать? - Joe 7 мин. Назад

+1

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

+0

Несомненно, большое спасибо за ответ :) Данные, которые должны быть сохранены (по крайней мере, для немного), были бы статусом, а внешние переменные, которые будут храниться там постоянно, будут называться progress и messagecount. – Joe

+0

Хм, я просто думал, что я начал с того, что предыдущие значения выгрузили в другую переменную, затем другая переменная захватывает новые значения и повторяет их, чтобы увидеть, соответствуют ли предыдущие значения. Это довольно грязный способ сделать это, хотя, я думал, будет self.create с || = работать? – Joe

ответ

1

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

# I'll store nested hash with class instance, status and amount for each id in processed_ids var 
$processed_ids = {} 

$ids.each do |id| 
    processed_ids[id] ||= {} # 
    processed_ids[id][:instance] ||= MyClass.new(id) 
    processed_ids[id][:status] = get_status # Nokogiri method 
    processed_ids[id][:amount] = get_amount # Nokogiri method 
end 

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

+0

Знаешь, мне действительно очень нравится, когда люди объясняют, почему работает код, а не только код. Спасибо, так много! :) – Joe

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