現在,qiita-markdownというライブラリを使用して,自分のブログにソースコードを表示したいと考えています.しかし,出力結果が気にくわなかったので,内部のソースコードを自分でいじろうと読んでみたら,やや冗長な書かれ方をしている箇所があったため質問しました.
気になった箇所は以下です.
ruby
1class Highligher 2 def initialize(default_language: nil, node: nil, specific_language: nil) 3 @default_language = default_language 4 @node = node 5 @specific_language = specific_language 6 end 7 8 def self.call(*args) 9 new(*args).call 10 end 11 12 def call 13 outer = Nokogiri::HTML.fragment(%Q[<div class="code-frame" data-lang="#{language}">]) 14 frame = outer.at("div") 15 frame.add_child(filename_node) if filename 16 frame.add_child(highlighted_node) 17 @node.replace(outer) 18 end 19 20 21### ソースコード内では以下のような使われ方をしていた 22Highlighter.call( 23 default_language: default_language, 24 node: node, 25 specific_language: timeout_fallback_language, 26)
なぜ,わざわざ,Highligherのクラスメソッドであるcallを呼び出し,Highligherクラスのインスタンスを生成しているのでしょうか?
普通は以下のような書き方になると思います.
ruby
1 2class Highligher 3 def initialize(default_language: nil, node: nil, specific_language: nil) 4 @default_language = default_language 5 @node = node 6 @specific_language = specific_language 7 end 8 9 10 def call 11 outer = Nokogiri::HTML.fragment(%Q[<div class="code-frame" data-lang="#{language}">]) 12 frame = outer.at("div") 13 frame.add_child(filename_node) if filename 14 frame.add_child(highlighted_node) 15 @node.replace(outer) 16 end 17 18 19Highlighter.new( 20 default_language: default_language, 21 node: node, 22 specific_language: timeout_fallback_language, 23).call 24
このような,やや冗長な書き方をしているのには,何か理由があると思います.
どのような理由があると考えられるか教えていただけると幸いです.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/01/17 01:00 編集