我正在做一个Ruby Kata(罗马数字转换器),我正试图将我的代码分开,因此它不是一个巨大的块。
这是我到目前为止所做的:
def roman s
total = convert s[0,1]
(0..s.length).each do |i|
case convert (s[i+1,1]).to_i >= convert (s[i,1])
when true : total += convert s[i+1,1]
when false: total -= convert s[i+1,1]
end
end
total
end
def convert s
case s
when 'I' : 1
when 'V' : 5
when 'X' : 10
when 'L' : 50
when 'C' : 100
when 'D' : 500
when 'M' : 1000
else 0
end
我想在罗马方法中移动case语句,所以它现在看起来像这样:
case preceding_number_is_lower_than_next_number s,i
随着添加方法:
def preceding_number_is_lower_than_next_number s,i
convert (s[i+1,1]).to_i >= convert (s[i,1])
end
然而,当我这样做,并给它输入'XXXI'时,它会从给出29的正确输出变为不正确的输出10。
由于它是完全相同的代码运行,只是重构,我无法想象为什么行为会发生变化。
有什么想法吗?