ruby-dev や ruby-list で上が (っては消え) る話に、複素数のリテラルがあります。要は
Complex(1, 2)
を
1+2i
などと書きたいという話。僕自身は複素数なんて (Project Euler くらいでしか) 使ったことがないんで、リテラルが必要とは感じないんですが、こういう仕様を考えてみました。
1+2i
を
1+2.sugar_i
の syntax sugar とする。i に限定せず、数字リテラルに続くの英字を sugar_<それ> というメソッドの呼び出しとみなします。あとは Numeric#sugar_i を実装すれば OK 。
さらに引数として数値リテラルを書けるようにすれば、虚数なんて使わねーよという人にも使い道があります。例えば
5C3 => 5.sugar_C(3) #=> 20 5P3 => 5.sugar_P(3) #=> 60
とすれば順列や組み合わせの数を数学っぽく書けます。より Project Euler 向けの言語になりました。
また、元からあるリテラルも
0x100 => 0.sugar_x(100) #=> 256 1E-1 => 1.sugar_E(-1) #=> 0.1
となるので、メソッドとして実現できることになります。クールです。0x-1 とか 1E0.5 とかどうなるのかわかりませんけどクールです。
Perl が大好きな人は
2x3 => 2.sugar_x(3) #=> "222"
とかするとオシャレです。16 進数リテラルとかぶってるのは突っ込んだら負けです。
根っからのアセンブラな人は
100H => 100.sugar_H #=> 256
とすると心が安らぐことでしょう。255 が書けないのは愛嬌です。
あとは
(0w0) => 0.sugar_w(0) #=> "オンドゥル"
とか。ちょっと懐かしい。
以上、数値リテラルの拡張の提案でした。ほとんど冗談だけど、うまく設計すれば便利、かも。でも Perl 化しすぎなのでやっぱりダメかな。