遠藤と申します。

くだらないことで恐縮ですが、require 0 の例外メッセージが変です。

$ ./ruby -ve 'require 0'
ruby 1.9.0 (2007-12-06 patchlevel 0) [i686-linux]
-e:1:in `require': can't convert nil into String (TypeError)
        from -e:1:in `<main>'



また、Kernel.open が to_path を呼んでくれないのは仕様でしょうか。

require "pathname"
open(Pathname.new("foo")) {|fh| fh.read }
  #=> undefined method `to_open' for #<Pathname:foo>

Kernel.open は引数の to_open を呼ぶようですが、これは何のために必要
なんでしょうか。trunk のなかで to_open を定義するクラスは見あたり
ませんでした。自分で定義したクラスで to_open を定義すると何か嬉しい
ことがあるのでしょうか。

to_path などが導入された経緯を知らないので、とんちんかんなことを
言っていたらすみません。



もっと些細なことですが、to_path を定義した String を require すると
String 自身が優先されるようです。これは仕様でしょうか。わざわざ
to_path を定義しているのだから、そちらを見てあげる方が気が利いている
ような気がします (本当に些細でごめんなさい) 。

file = "○×ライブラリ"
def file.to_path; "foobar.rb"; end

puts "#{ file }をロードします..."
require file #=> no such file to load -- ○×ライブラリ



require 0 のエラーメッセージのパッチだけ送ります。

Index: file.c
===================================================================
--- file.c	(revision 14122)
+++ file.c	(working copy)
@@ -111,6 +111,7 @@
     if (rb_respond_to(obj, to_path)) {
 	tmp = rb_funcall(obj, to_path, 0, 0);
     }
+    if (NIL_P(tmp)) tmp = obj;
   exit:
     StringValueCStr(tmp);
     if (obj != tmp) {

-- 
Yusuke ENDOH <mame / tsg.ne.jp>