2011-07-29 13 views
2

私はこれをリファクタリングするための最善の方法または最も正しい方法を知りたいと思います。初心者のリファクタリングの質問

series = Hash.new 
series[:series_id] = doc.xpath("Data/Series/id").inner_text if not doc.xpath("Data/Series/id").nil? 

答えて

6
series = { :series_id => doc.xpath("Data/Series/id").try(:inner_text) } 
+1

DigitalRossは正しいです、私が置くつもりだったのです。 'try'関数は不思議に作用します。 – ardavis

+0

これは素晴らしいものです。それはわずかに異なる動作をしますが、常に ':series'キーが追加されます。その効果はほとんどの場合同じです。 'series [:series_id]'はキーが定義されていない場合、キーの存在を明示的にテストしない限り、 'nil'も返します。 – nathanvda

4

私が最も革新的なリファクタリングがhappymapperのようなマッピングライブラリ、オブジェクト、フードの下にあるすべてのこの汚い実装の詳細を残すために、XMLを使用することだろうと思う

series = Hash.new 
id_element = doc.xpath("Data/Series/id") 
series[:series_id] = id_element.inner_text unless id_element.nil? 
+6

「id_element.nil以外」の代わりに最後の行に「if id_element」と書いたほうが慣れやすいでしょう。 – gregspurrier