1

我想在做一些数学运算时将罗马数字与阿拉伯数字混合。

我会为每个符号定义一些类

第一类
结尾

第五类
结尾

X 级
结尾

现在我希望能够说类似的话

5 + V # 结果为 10
X + 12 # 结果为 22

但我不确定从哪里开始。
我必须定义一个方法来告诉 ruby​​ 是如何5 + V工作的,给每个类一个值,当我说

一世

我应该得到值 1。

我应该看看什么样的方法可以让我将X其视为数字 10?

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

您可以覆盖 roman 类中的 + 运算符,这样它适用于 X + 12,但不适用于 12 + X。请参阅此博客文章:http://strugglingwithruby.blogspot.ca/2010/04/operator-overloading。 html获取更多信息

该定义不可交换,即尝试执行 3 + a 将失败。要使其正常工作,您需要覆盖 Integer 中的加法方法 - 我认为这不是一个好主意。

于 2012-05-17T03:38:52.463 回答