我想在做数学时将罗马数字与阿拉伯数字混合。
我会为每个符号定义一些类
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?
答案 0 :(得分: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"
答案 1 :(得分:0)
您可以覆盖罗马班级中的+运算符,因此适用于X + 12,但不适用于12 + X.请参阅此博文:http://strugglingwithruby.blogspot.ca/2010/04/operator-overloading.html了解更多信息
见
该定义不是可交换的,即试图做3 + a会失败。要使其工作,您需要覆盖Integer中的添加方法 - 我认为这是一个坏主意。