まつもと ゆきひろです
In message "[ruby-list:836] Re: ruby 0.99.2-961011 available"
on 96/10/12, Jun Kuroda <j_kuro / pluto.ai.kyutech.ac.jp> writes:
|
|黒田です.
|/usr/local/lib/ruby/tk.rb:59:in `[]=': undefined method `(null)' for #<IO:0x6a4b8>(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)