From: Nobuyoshi Nakada Date: 2007-12-07T13:54:50+09:00 Subject: [ruby-dev:32480] Re: about to_path and to_open なかだです。 At Thu, 6 Dec 2007 21:34:08 +0900, Yusuke ENDOH wrote in [ruby-dev:32473]: > また、Kernel.open が to_path を呼んでくれないのは仕様でしょうか。 > > require "pathname" > open(Pathname.new("foo")) {|fh| fh.read } > #=> undefined method `to_open' for # String以外では常にto_openを呼ぶようになっていますが、Stringに対 してはto_pathは呼ばれることはありません。 At Fri, 7 Dec 2007 10:02:55 +0900, Nobuyoshi Nakada wrote in [ruby-dev:32474]: > to_pathはIO専用のto_strの特別版ということだと思います。 ということでよければ、rb_f_open()はto_strではなくてto_pathを使う ほうがいいと思います。 Index: file.c =================================================================== --- file.c (revision 14122) +++ file.c (working copy) @@ -112,4 +112,7 @@ rb_get_path(VALUE obj) tmp = rb_funcall(obj, to_path, 0, 0); } + else { + tmp = obj; + } exit: StringValueCStr(tmp); Index: io.c =================================================================== --- io.c (revision 14122) +++ io.c (working copy) @@ -3800,5 +3800,6 @@ rb_f_open(int argc, VALUE *argv) } else { - VALUE tmp = rb_check_string_type(argv[0]); + VALUE tmp = argv[0]; + FilePathValue(tmp); if (NIL_P(tmp)) { redirect = Qtrue; -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦