Ruby:像一个数字一样对待一个类?

MxL*_*evs 1 ruby

我想在做数学时将罗马数字与阿拉伯数字混合.

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

class I
end

class V
end

class X
end

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

5 + V   # results in 10
X + 12  # results in 22

但我不知道从哪里开始.
我必须定义一个方法,告诉ruby如何5 + V工作,给每个类一个值,当我说

I

我应该得到值1.

我应该采用什么样的方法让我将其X视为10号?

Mis*_*cha 6

对我来说似乎很简单:

V = 5
V + 1 #=> 6
Run Code Online (Sandbox Code Playgroud)

如果你想把结果显示为罗马数字,我会Fixnum用一个to_roman方法扩展类:

class Fixnum
  def to_roman
    # I'll leave the implementation up to you
  end
end
Run Code Online (Sandbox Code Playgroud)

有了这个你可以做:

10.to_roman #=> "X"
Run Code Online (Sandbox Code Playgroud)