Ruby Can';不要将代码拆分成方法而没有错误

Ruby Can';不要将代码拆分成方法而没有错误,ruby,subroutine,roman-numerals,Ruby,Subroutine,Roman Numerals,我正在做一个RubyKata(罗马数字转换器),我试图将我的代码分离出来,这样它就不会是一个巨大的块 以下是我到目前为止的情况: 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: t

我正在做一个RubyKata(罗马数字转换器),我试图将我的代码分离出来,这样它就不会是一个巨大的块

以下是我到目前为止的情况:

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

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


有什么想法吗?

除了最简单的情况外,考虑在你的论点周围加上括号。它可以隐藏很多bug(我不知道它是否在这里…),而且参数括号和方法名称之间没有空格。请给我们一个完整版本的最终代码。请用更正确的形式。