From: Takahiro HIMURA Date: 2009-07-24T01:49:02+09:00 Subject: [ruby-dev:38891] Re: 複素数リテラルについて はじめまして。樋村といいます。 >> # 2xxx を (2 * Math::XXX) の syntax sugar とするとかどうかな……。 Ruby とは関係ない話で恐縮ですが、C++0x の current draft には User-defined literals なるものが定義されているようです。 http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2009/n2914.pdf (see section 2.14.8) http://www.open-std.org/JTC1/SC22/WG21 例えば long double operator""km(long double); のように定義しておいて、12.5km とか書くと operator""km(12.5L) を呼んだ ことになります。 Ruby でも、これと似たような物を導入して、 2i # => 2.literal_i とするとかはどうでしょうか?これを使えば、Rational も 3/2r # => 3 / 2.literal_r => 3 / Rational(2,1) => Rational(3,2) と書けます。 # 後者が定着すると 3/2i == -3i/2 でハマる人が続出しそうですが… > そうしたとしても「でもクォータニオンはリテラルはおろか組み込みですらない > ぞ」という問題は発生するんですが、それは工学上の利用頻度の差で線を引くと > いうことですね。 四元数は…、どうしましょうか、i が虚数とかぶりますね。 ちょっとやりすぎな感はありますが、電卓用途では便利かと。 # Quanty や NumRu::Units あたりと組み合わせるとか。 ただ、ライブラリで好き勝手にリテラルを定義されてしまうと破綻しそうですね。 Mix-in として定義しておいて、使いたければユーザ側でやってもらうとしても、 一度 mix-in されてしまうと全体に影響を与えてしまいますしね…。 -- 樋村隆弘 (Takahiro HIMURA)