@Konboi memo

主に技術に関してつらつらと。

標準出力を出力しつつファイルにも出力する

移植してるgemで表題のことを実現したかった。

色々調べてみたけど、実現したいことをするにはだいぶ古いきじだけれとこちらのページが参考になった。

    def std_out
      log_fh = self.log_fh
      std_out = Object.new
      std_out.instance_eval{@ofile=log_fh}
      class <<std_out
        def write(str)
          STDOUT.write(str)
          @ofile.write(str)
        end
      end

      return std_out
    end

こんな感じで 標準出力と指定したファイルに出力するためだけのwriteメソッドを定義する。

これで実現できた。

ただ、これで使ってるlog_fhprivate メソッドじゃなくなってしまったので、もう少しスマートにしたいなと。

メタプログラミングRuby

メタプログラミングRuby