我想在做一些数学运算时将罗马数字与阿拉伯数字混合。
我会为每个符号定义一些类
第一类 结尾 第五类 结尾 X 级 结尾
现在我希望能够说类似的话
5 + V # 结果为 10 X + 12 # 结果为 22
但我不确定从哪里开始。
我必须定义一个方法来告诉 ruby 是如何5 + V
工作的,给每个类一个值,当我说
一世
我应该得到值 1。
我应该看看什么样的方法可以让我将X
其视为数字 10?
我想在做一些数学运算时将罗马数字与阿拉伯数字混合。
我会为每个符号定义一些类
第一类 结尾 第五类 结尾 X 级 结尾
现在我希望能够说类似的话
5 + V # 结果为 10 X + 12 # 结果为 22
但我不确定从哪里开始。
我必须定义一个方法来告诉 ruby 是如何5 + V
工作的,给每个类一个值,当我说
一世
我应该得到值 1。
我应该看看什么样的方法可以让我将X
其视为数字 10?
对我来说似乎很简单:
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"
您可以覆盖 roman 类中的 + 运算符,这样它适用于 X + 12,但不适用于 12 + X。请参阅此博客文章:http://strugglingwithruby.blogspot.ca/2010/04/operator-overloading。 html获取更多信息
看
该定义不可交换,即尝试执行 3 + a 将失败。要使其正常工作,您需要覆盖 Integer 中的加法方法 - 我认为这不是一个好主意。