0

私は現在、非常に多くの新しいクラス インスタンスを含むシステムを使用しているため、ここで提案されているように、配列を使用してそれらを割り当てる必要がありました: Create and initialize instances of a class with sequence names

ただし、新しいインスタンスが表示されるたびに、既存のインスタンスを上書きすることなく、常に新しいインスタンスを追加する必要があります。いくつかの検証と既存のコードの修正版が最善の選択肢ではないでしょうか?

これは私のコードです。現在、実行するたびに既存のデータが上書きされます。ステータスが変更された場合は上書きされるようにしたいのですが、そこに1つまたは2つの変数を永続的に保存できるようにしたいです。

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 は機能するのでしょうか? – ジョー 7 分前

4

1 に答える 1

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

このコードは何をしますか: ID ごとにクラスのインスタンスを作成するのは 1 回だけですが、そのステータスと金額は常に更新されます。

于 2013-09-01T14:07:30.173 に答える