From: nobu.nakada@... Date: 2000-03-11T19:15:45+09:00 Subject: [ruby-dev:9424] method_missing(Fixnum) なかだです。 method_missing に Symbol でない値が渡ると undefined method `(null)' とかいわれてしまってワケが分かりません。 --- eval.c 2000/03/08 14:19:22 1.34 +++ eval.c 2000/03/11 09:05:29 @@ -3739,8 +3739,15 @@ rb_f_missing(argc, argv, obj) char *file = ruby_sourcefile; int line = ruby_sourceline; + char idnum[(SIZEOF_LONG * CHAR_BIT - 1) * 77 / 256 + 3]; + const char *mname; if (argc == 0) rb_raise(rb_eArgError, "no id given"); id = NUM2INT(argv[0]); + mname = rb_id2name(id); + if (!mname) { + snprintf(idnum, sizeof(idnum), "%ld", id); + mname = idnum; + } argc--; argv++; @@ -3770,6 +3777,4 @@ rb_f_missing(argc, argv, obj) } else if (last_call_status & CSTAT_VCALL) { - const char *mname = rb_id2name(id); - if (('a' <= mname[0] && mname[0] <= 'z') || mname[0] == '_') { format = "undefined local variable or method `%s' for %s%s%s"; @@ -3790,5 +3795,5 @@ rb_f_missing(argc, argv, obj) *ruby_frame = *_frame.prev->prev; - rb_raise(rb_eNameError, format, rb_id2name(id), + rb_raise(rb_eNameError, format, mname, desc, desc[0]=='#'?"":":", desc[0]=='#'?"":rb_class2name(CLASS_OF(obj))); -- そうだ 強気に ちょっと インチキに☆彡 中田 "Bugるくらいがちょうどいいかも;-)" 伸悦