(2010/03/27 20:26), EGUCHI Osamu wrote:
> えぐち@エスアンドイーです
> 
> 2010年3月27日19:14 NARUSE, Yui<naruse / airemix.jp>:
>> さて、えぐちさんの指摘は第一にはリテラルとしての導入は不可能という指摘だと思います。
>> それは仰るとおりです。
> 
> リテラル表現には(そのままの)aA 表現は導入不可能という点には
> 異論はないという共通認識を踏まえた上で。。
> 
>> 一方で、String#to_f との衝突で考えると、例えば "0x1.badp+0".to_f を実行した
>> 場合の結果は何を期待しているのでしょうか。
>> たぶん 0x1 を解釈して 1.0 が返るのを期待するのかなと思います。
>> しかし、String#to_f は 16 進を解さないので、現在 0.0 が返ります。
>> つまり、元々期待はずれだった結果がまた別の値になるわけです。
>> これは、当初の期待が誤っていると言えるでしょう。
>> よって、String#to_f についてはえぐちさんの指摘は当たらないと考えます。
> 
> String#to_f については '.’ + メソッド との整合性は必須でないので、
> 上記の論点は正しいと思います。
> 
> ただ、浮動小数点リテラル表現と String#to_f は同じであろうと
> 期待するのはかなり自然なことではないかと思います。
> #驚き最小の法則

こちらは、一貫性と利便性が衝突する事例という話だと思います。

で、現在同じかというと "10".to_f のような 10 進整数はすでに異なっています。
また、エッジケースを攻めると 4._9 はエラーになるが、
"4._9".to_f は 4.9 を返すというような例もあります。

結局、制約の強いリテラルと、文字列を解釈するのでは条件が異なるわけで、
「Ruby のリテラルとして浮動小数点数として解釈されるならば、
String#to_f でも解釈されるべき」は尊重されるべきだと思いますが、
その逆は必ずしも成り立つ必要はないと思います。

-- 
NARUSE, Yui  <naruse / airemix.jp>