From: nobu@... Date: 2007-07-24T02:56:20+09:00 Subject: [ruby-dev:31287] Re: +:x doesn't raise exception なかだです。 At Mon, 23 Jul 2007 18:01:14 +0900, Yusuke ENDOH wrote in [ruby-dev:31282]: > > リテラルの単項+は無視してるんですが、エラーのほうがいいでしょ > > うか。ついでに単項−も可能なら変換するようにしてみましたが。 > > その最適化は Fixnum#+@ の再定義を無視していますがいいのでしょうか。 > > > $ ./ruby -ve 'class Fixnum; def +@; nil; end; end; p(+1)' > ruby 1.8.6 (2007-07-19 patchlevel 5000) [i686-linux] > 1 これは +1 で一つのリテラルですから、別です。該当するのは p(+ 1) のように+と数字が分かれている場合です。 > $ ./ruby -ve 'class Fixnum; def +@; nil; end; end; p(+(1))' > ruby 1.8.6 (2007-07-19 patchlevel 5000) [i686-linux] > nil [ruby-dev:31267]を当てるとこれも1のままになります。 > 実用上は無視して問題なさそうなので一つの手だとは思いますが、 > それなら Fixnum#+ や Fixnum#* の再定義も無視して定数畳み込み > 最適化を実装するともっと嬉しそうです。 リテラル同士の演算は再定義を無視する、またはパース時点の定義を 使うとか? -- --- 僕の前にBugはない。 --- 僕の後ろにBugはできる。 中田 伸悦