From: yamataka@...08.itscom.net Date: 2019-07-03T12:24:15+09:00 Subject: [ruby-list:50802] Re: [質問] メソッド内で、クラス new するのは良くない? 山口です。 On Sat, 29 Jun 2019 23:11:39 +0900, yamataka@u08.itscom.net wrote: > 自作の下記コード(抜粋)中のメソッド > get_text_from_page_source_xml > が呼びだされる度に、 > REXML::Document.new(xml) > .new してしまうので、 > その都度、インスタンスが作成されるのは、良くないのでは? > > と思いつつも... REXML::Document.new https://docs.ruby-lang.org/ja/latest/method/REXML=3a=3aDocument/s/new.html のマニュアルをみたところ, singleton method との記載より、インスタンスがそもそも1つのみで、 問題ないとの認識に至りました。 合っていますでしょうか? > メッソド get_text_from_page_source_xml 内なので、 > ローカル変数同様、.new された変数もローカル変数と同様に > メッソドの実行が終われば、その領域も破棄される > > ので、問題ない? > > という風に理解していますが、正しいでしょうか? > > xml の element を抽出するには、 > REXML::Document.new(xml) > xml ソースを引数にして .new しないとできないし... > > のように、 > > 自分の理解の整理がいまひとつできないので、ご教示いただけますでしょうか? > > ■ 自作コード(抜粋) > > require 'rexml/document' > > def get_text_from_page_source_xml(**resource_ids) > > xml = @cbelement.page_source > doc = REXML::Document.new(xml) > > resource_ids.each do |rid,v| > arid = "com.aspiro.tidal:id/" + rid.to_s # arid: actual resource id > xpath = "//*[@resource-id='#{arid}']" # need ' at before and end #{id} > > begin > text = doc.elements[xpath].attributes["text"] > resource_ids[rid] = text > rescue => e > resource_ids[rid] = nil > end > end > > return resource_ids > end > > id0 = :artistName > id1 = :mediaItemTitle > texts = get_text_from_page_source_xml(id0 => :nil, id1 => :nil) >