e$B1sF#$H?=$7$^$9!#e(B
e$B$/$@$i$J$$$3$H$G62=L$G$9$,!"e(Brequire 0
e$B$NNc30%a%C%;!<%8$,JQ$G$9!#e(B
$ ./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
’
e$B$^$?!"e(BKernel.open e$B$,e(B to_path
e$B$r8F$s$G$/$l$J$$$N$O;EMM$G$7$g$&$+!#e(B
require “pathname”
open(Pathname.new(“foo”)) {|fh| fh.read }
#=> undefined method `to_open’ for #Pathname:foo
Kernel.open e$B$O0z?t$Ne(B to_open
e$B$r8F$V$h$&$G$9$,!"$3$l$O2?$N$?$a$KI,MWe(B
e$B$J$s$G$7$g$&$+!#e(Btrunk e$B$N$J$+$Ge(B to_open
e$B$rDj5A$9$k%/%i%9$O8+$"$?$je(B
e$B$^$;$s$G$7$?!#<+J,$GDj5A$7$?%/%i%9$Ge(B to_open
e$B$rDj5A$9$k$H2?$+4r$7$$e(B
e$B$3$H$,$"$k$N$G$7$g$&$+!#e(B
to_path e$B$J$I$,F3F~$5$l$?7P0^$rCN$i$J$$$N$G!"$H$s$A$s$+$s$J$3$H$re(B
e$B8@$C$F$$$?$i$9$_$^$;$s!#e(B
e$B$b$C$H:3:Y$J$3$H$G$9$,!“e(Bto_path e$B$rDj5A$7$?e(B String e$B$re(B
require e$B$9$k$He(B
String e$B<+?H$,M%@h$5$l$k$h$&$G$9!#$3$l$O;EMM$G$7$g$&$+!#$o$6$o$6e(B
to_path
e$B$rDj5A$7$F$$$k$N$@$+$i!”$=$A$i$r8+$F$"$2$kJ}$,5$$,Mx$$$F$$$ke(B
e$B$h$&$J5$$,$7$^$9e(B (e$BK\Ev$K:3:Y$G$4$a$s$J$5$$e(B) e$B!#e(B
file = “e$B!{!_%i%$%V%i%je(B”
def file.to_path; “foobar.rb”; end
puts “#{ file }e$B$r%m!<%I$7$^$9e(B…”
require file #=> no such file to load – e$B!{!_%i%$%V%i%je(B
require 0 e$B$N%(%i!<%a%C%;!<%8$N%Q%C%A$@$1Aw$j$^$9!#e(B
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) {