From: matz@... (Yukihiro Matsumoto) Date: 1996-10-14T10:20:14+09:00 Subject: [ruby-list:839] Re: ruby 0.99.2-961011 available まつもと ゆきひろです In message "[ruby-list:836] Re: ruby 0.99.2-961011 available" on 96/10/12, Jun Kuroda writes: | |黒田です. |/usr/local/lib/ruby/tk.rb:59:in `[]=': undefined method `(null)' for #(IO) | |と言います. 文字列とFixnum以外をキーとした場合の動作が不良でした。原因は 大域変数と同じ名前のローカル変数を定義してしまったためです (恥ずかしい)。このメイルにつけたパッチで直ります。 |いつの version からかわかりませんが ruby-mode.el が | | if (FileTest.exists?(fname) && (is_cgi == FALSE)) | ^ ^ |この () を組と思っているようです. # exist?を使ってくださいね。exists?は1.0でなくなります。 これはインデントは正しいがemacsが括弧の対応を間違っていると いうものですよね。これはちょっと深い問題があります。というの もrubyでは?はメソッド名の一部という働きと,文字定数の記号と いう2種類の役目があります。今回は文字定数としてemacsのsyntax を定義してしまったため,exists?(の括弧を無視してしまったので す。とりあえずは?のsyntax定義を外せば元に戻りますが,今度は printf "%c\n", ?( のような場合で困るでしょう。 printf "%c\n", ?\( と書けば良いことですが。一応パッチではそのようにしておきます が,もうちょっと考えたいと思います。 * この対応で十分 * メソッド名に?をいれるのはやはり良くない * 文字定数が?で始まるのは良くない などが考えられます。文字定数を表す文字も替えるとすると良い記 号が思い付かないのも確かなんですが。 まつもと ゆきひろ /:|) --- hash.c~ Fri Oct 11 14:34:26 1996 +++ hash.c Sun Oct 13 01:06:20 1996 @@ -55,3 +55,3 @@ { - unsigned int hash; + unsigned int hval; @@ -59,3 +59,3 @@ case T_FIXNUM: - hash = a; + hval = a; break; @@ -63,3 +63,3 @@ case T_STRING: - hash = str_hash(a); + hval = str_hash(a); break; @@ -67,6 +67,6 @@ default: - hash = rb_funcall(a, hash, 0); - hash = FIX2INT(hash); + hval = rb_funcall(a, hash, 0); + hval = FIX2INT(hval); } - return hash % mod; + return hval % mod; } --- sample/ruby-mode.el~ Mon Sep 30 11:10:26 1996 +++ sample/ruby-mode.el Mon Oct 14 09:12:19 1996 @@ -75 +75 @@ - (modify-syntax-entry ?? "/" ruby-mode-syntax-table) + (modify-syntax-entry ?? "_" ruby-mode-syntax-table)