logo       

[ruby-list:42118] Re: puts,printの出力をファイルにも出力するには: msg#00149

lang.ruby.japanese

Subject: [ruby-list:42118] Re: puts,printの出力をファイルにも出力するには

永井 様, まつもと 様 ご回答ありがとうございます。

永井 様の案ではmethod_missingを利用して転送している点と
案2では$stdout.add(f1, f2)といった特徴がある点が参考となりました。
ありがとうございます。

まつもと 様曰く
>要するにレシーバを持たないprintやputsは内部処理を適当に行っ
>てくれるので、出力先($stdout)にwriteメソッドしか要求しない
>(のでそれだけ用意すればよい)が、

ですが、だいぶ前に「Ruby プログラム入門」と言う本を読んだときに
puts,printなどはレシーバであるmainがオブジェクトの転送を適宜
おこなうと書いてありましたが、このことを意味するのでしょうか?

まつもと 様曰く
>直接 $stdout.print とか
>$stderr.print とした場合には、それらに向けて出力するようなメ
>ソッドを別途用意する必要があるということですね。

例示したコード
>defout = Object.new
>defout.instance_eval{@ofile=open("log.txt", "w")}
>class <<defout
> def write(str)
> STDOUT.write(str)
> @ofile.write(str)
> end
> public :puts,:print #追加
>end

mainの転送機能が機能しないので、別途メッッドを用意する代わりに
Kernelのputs,printの呼び出しができるようにpublicを追加している。
その変更は特異メソッドが定義された上記のオブジェクトに限定されて
いると理解しました。

間違った解釈であれば訂正の上ご指導ください。
普段奥深くは考えず利用しているのでちょっと変わったことをしようとする
と躓きます:-)

お手間をお掛けしますが、宜しくお願いします。

== Iwasaki ==
Email: ih000667@mb.taiyokogyo.co.jp




<Prev in Thread] Current Thread [Next in Thread>
Google Custom Search

News | FAQ | advertise