自作の下記コード(抜粋)中のメソッド
get_text_from_page_source_xml
が呼びだされる度に、
REXML::Document.new(xml).new
してしまうので、
その都度、インスタンスが作成されるのは、良くないのでは?
と思いつつも...
メッソド get_text_from_page_source_xml
内なので、
ローカル変数同様、.new された変数もローカル変数と同様に
メッソドの実行が終われば、その領域も破棄される
ので、問題ない?
という風に理解していますが、正しいでしょうか?
xml の element を抽出するには、
REXML::Document.new(xml)
xml ソースを引数にして .new しないとできないし...
のように、
自分の理解の整理がいまひとつできないので、ご教示いただけますでしょうか?
■ 自作コード(抜粋)
ruby
1require 'rexml/document' 2 3def get_text_from_page_source_xml(**resource_ids) 4 5 xml = @cbelement.page_source 6 doc = REXML::Document.new(xml) 7 8 resource_ids.each do |rid,v| 9 arid = "com.aspiro.tidal:id/" + rid.to_s # arid: actual resource id 10 xpath = "//*[@resource-id='#{arid}']" # need ' at before and end #{id} 11 12 begin 13 text = doc.elements[xpath].attributes["text"] 14 resource_ids[rid] = text 15 rescue => e 16 resource_ids[rid] = nil 17 end 18 end 19 20 return resource_ids 21end 22 23id0 = :artistName 24id1 = :mediaItemTitle 25texts = get_text_from_page_source_xml(id0 => :nil, id1 => :nil)
メソッドの中でクラス.newがダメ!となれば、
文字列、配列、ハッシュ、日付、何を生成するのも
全てダメということになってしまいますね...。
ご教示いただきたいところは
>呼びだされる度に、
>REXML::Document.new(xml).new
>してしまうので、
>その都度、インスタンスが作成されるのは
なのですが、そこは問題ないでしょうか?
Nokogiri を用いれば
doc = Nokogiri::XML(xml)
.new しなくて書けます。
標準の REXML::Document だと、
doc = REXML::Document.new(xml)
で、毎度 .new されるので気になっています。