无法将代码分离到方法中而不会出错

时间:2012-06-27 13:23:26

标签: ruby subroutine roman-numerals

我正在做一个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。

由于它是完全相同的代码运行,只是重构,我无法想象为什么行为会发生变化。

有什么想法吗?

0 个答案:

没有答案