1

数学をするときに、ローマ数字とアラビア数字を混ぜたいと思っています。

シンボルごとにいくつかのクラスを定義します

クラスⅠ
終わり

クラスⅤ
終わり

クラスX
終わり

今、私は次のようなことが言えるようになりたいです

5 + V # は 10 になります
X + 12 # 結果は 22

しかし、どこから始めればよいかわかりません。
ruby にどのよう5 + Vに機能するかを伝えるメソッドを定義し、各クラスに値を与え、

値1を取得する必要があります。

X10番として扱うには、どのような方法を検討すればよいでしょうか。

4

2 に答える 2

6

私には本当に簡単に思えます:

V = 5
V + 1 #=> 6

結果をローマ数字で表示したい場合は、メソッドを使用してFixnumクラスを拡張します。to_roman

class Fixnum
  def to_roman
    # I'll leave the implementation up to you
  end
end

これにより、次のことができます。

10.to_roman #=> "X"
于 2012-05-17T03:39:11.610 に答える
0

ローマン クラスの + 演算子を上書きすると、X + 12 では機能しますが、12 + X では機能しません。このブログ投稿を参照してください: http://strugglingwithruby.blogspot.ca/2010/04/operator-overloading詳細については、html

見る

この定義は可換ではありません。つまり、3 + a を実行しようとすると失敗します。それを機能させるには、Integer で加算メソッドをオーバーライドする必要があります。これは悪い考えだと思います。

于 2012-05-17T03:38:52.463 に答える