String#each

先の RSSJavaScript に変換するスクリプトでは

  def to_js
    self.to_html.split("?n").collect { |line|
      line.gsub!(/'/, "?'")
      "document.writeln('#{line}');"
    }.join("?n")
  end

という処理を書いていましたが、String の API を眺めていたところ、String は Enumerable を Mixin していて each は行単位に String を分割してイテレートしてくれるようです。なので自分で split している上記コードは冗長でした。

  def to_js
    self.to_html.collect { |line|
      line.chomp!
      line.gsub!(/'/, "?'")
      "document.writeln('#{line}');"
    }
  end

と、書き替えました。また join して結果を返していましたが、Array で返しておいて使う側でよしなに扱うようにしました。(puts に対してはどちらでも出力は同じなようです。)