From: Nobuyoshi Nakada Date: 2008-03-15T15:18:33+09:00 Subject: [ruby-dev:34061] Re: putsでSEGV なかだです。 At Sat, 15 Mar 2008 12:43:25 +0900, rubikitch@ruby-lang.org wrote in [ruby-dev:34059]: > $stdoutに別のオブジェクトを指定した場合、putsでSEGVります。 > Ruby 1.9.0では大丈夫です。 スタックオーバーフローしてますね。原因は、r15564でKernel#putsが $stdout.putsを呼ぶようになったのですが、このLoggerはputsメソッド を持っていないのでKernel#putsがまた呼ばれることになるためです。 > class Logger > def write(obj) > STDOUT.print Time.now.strftime("%Y/%m/%d %H:%M:%S:"), obj > end > end > $stdout = Logger.new 対応としては二つほど思い付きますが、どうしましょうか。 1. r15564をrevertする。 2. $stdoutの仕様を変えて、writeだけでなくputs,putcも定義必須にす る。Kernel#putsを呼んでしまうのを防ぐために、rb_f_putcと rb_f_putsではrb_funcall2ではなくrb_funcall3を使うようにする。 -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦