時期を逸してしまった感がありますが...

In article <1041924124.598817.23962.nullmailer / picachu.netlab.jp>,
  matz / ruby-lang.org (Yukihiro Matsumoto) writes:

> であるので許してくれるとかはないですよね。1.6のやり方は
> 
>   "**"メソッドの呼び出しのレシーバが定数であり、かつその値が
>   Fixnum, Bignum, Floatのいずれかであれば、レシーバをその値
>   の符号を反転したものに取り替え、かつ全体に単項マイナス演算
>   子を適用する
> 
> というかなり不自然なものなので、できれば避けたいのですが。
> いや、それで構わないという意見も歓迎します。

おなじようなことをやるにしても、数値リテラル直前の - のトークンを変え
て文法で対処すれば少しは自然な処理になると思います。

あと、今の状態にしても

% ruby -ve '
p(-.1.floor)
p(-0.1.floor)
'
ruby 1.8.0 (2003-01-20) [i386-freebsd4.7]
0
-1

という違いは少し変ですね。

> 普通の文法では単項マイナスとメソッド呼び出しのドットの優先順
> 位が**のせいで矛盾するということのようです。

どうなんでしょうねぇ。** を考えなくても (既に指摘されているように)
-1.5.floor と -v.floor だけで矛盾するんじゃないですかね。

1.5 にとっては優先順位は - のほうが高くて、. のほうが低く、
v にとっては優先順位は . のほうが高くて、- のほうが低い、と。

まぁ、演算子順位構文解析を思い出すと、あの順位関係はトークン間の関係で
はあるけれども、別に全順序である必要はないので、こんなのは矛盾という程
のことではないのかもしれませんが。

それはそれとして、ここでいう優先順位というのはくっついて見える度合なわ
けで、** は (右肩に乗せる記法よりも) 左右が離れているぶんくっついて見
えないというのは一つの考え方ではあります。だからといってそういう考え方
を勧めるわけではありませんが。
-- 
[田中 哲][たなか あきら][Tanaka Akira]