[ruby-list:50802] Re: [質問] メソッド内で、クラス new するのは良くない?
From:
yamataka@...08.itscom.net
Date:
2019-07-03 03:24:15 UTC
List:
ruby-list #50802
山口です。
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)
>