2012-01-16 11 views
0

これは私にとっては非常に奇妙なようですが、私は実行中のスクリプトを持っています。これは以前のloadのスクリプトの以前の値を保持しています。 req1の値は、スクリプトの連続したロードにダンプされません。ここでirbに読み込まれたスクリプトが以前の値を保持できないようにするにはどうすればよいですか?

はスクリプトです:ここでは

require 'amazon_product' 

req1 = nil 
req1 = AmazonProduct["us"] 

puts req1.inspect 

req1.configure do |c| 
    c.key = "[...]" 
    c.secret = "[...]" 
    c.tag = "[...]" 
end 

puts req1.inspect 

req1 << { 
    'Version'    => '2010-11-01', 
    'Operation'    => 'ItemLookup', 
    'SearchIndex'   => "Books", 
    'Keywords' => 'Corrections' 
    #, 'A' => 'B' 
} 
puts req1.inspect 

resp = req1.get 

File.open(File.join(File.dirname(__FILE__), 
     "amazon_response.xml"), 'w') {|f| f.write(resp.body) } 

は、手順は次のとおりです。

  • オープンIRB(レールを介して、C)
  • は、loadコマンドを経由して
  • コメント解除スクリプトを実行します。 A => B行
  • 再度スクリプトを実行
  • コメント A => Bライン
  • 実行スクリプトを再度

終わりreq1オブジェクトは、その中に'A' => 'B'を持つことになります。私は、スクリプトの実行ごとに新しいオブジェクトを作成しているように見えるので、なぜこれが起こっているのかは不明です。オブジェクトはすべての実行で記憶されているようです。

このようなことを防ぐにはどうすればよいですか?私はいくつかのことを試しましたが、なぜそれが最初に起こっているのかわからないので、私はストローで握っているように感じます。

+0

AmazonProduct []が実際に何をしているかによって異なります。あなたは何も作成していない、あなたはAmazonProduct ["us"]を参照しています。 –

+0

これは理にかなっていますが、負荷全体にキャッシュされますか?ソースはhttp://rubydoc.info/github/hakanensari/amazon_product/master/AmazonProduct#%5B%5D-class_methodです。 'us'は@requestsオブジェクトに渡されます。 AmazonProductオブジェクトに.newがないため、これが起こっていますか? – jcollum

答えて

0

あなたはirbを再起動していないので、AmazonProduct[]が何であるかによって異なります。 From its source

def self.[](locale) 
    @requests[locale] ||= Request.new(locale) 
end 

それは IFF 1がまだ存在しない新しい要求を作成し、キャッシュです。

1つの観点からは、「newがないため」です。 newは、ロケールがまだロードされていない場合にのみ呼び出されます。別のものからは、new/not-newですが、キャッシングは文書化せずに行うこともできます。

ふさわしい仮定があります。なぜ私の最初の考えは[]の実装であったのですか?

irbを再起動していないについて

:(私はチェックしませんでした)キャッシュをリロードするためのメカニズムが存在しない場合は、行うには最速のものは、サルパッチ[]になると、常にAのための新しいRequestを取得します与えられたロケール。

+0

私はソースを読んでいますが、 'irb'のように、オブジェクトがそのようなクロストークを持たないように、ある種のスローアウェイコンテキストで各スクリプトを実行しているようです。 – jcollum

+0

それは首に本当の痛みをテストします。あなたはirbを再起動せずにオブジェクトをフレッシュにするよう提案していますか? – jcollum

+0

@jcollumおそらく遅すぎますが、回避策についてのコメントを追加しました:) –

関連する問題