[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)
> 

In This Thread