Ruby虽然有错误

时间:2012-01-09 22:30:50

标签: ruby debugging while-loop

Ruby,通常非常宽容,在while循环中给我一个错误;我不明白为什么。

def foo(vals)
  n = vals.length
  key = n-1
  newkey = n-1

  while ((key > 0) && (vals[key] <= vals[key-1])) key--

  key
end

错误:

prog.rb:37: syntax error, unexpected tIDENTIFIER, expecting keyword_do_cond or ';' or '\n'
    while ((key > 0) && (vals[key] <= vals[key-1])) key--
                                                       ^

有什么想法吗?

3 个答案:

答案 0 :(得分:3)

Ruby没有前/后递增/递减运算符。我们使用x -= 1 如果你想要一个衬垫,请先粘贴它。

def foo(vals)
  n = vals.length
  key = n-1
  newkey = n-1

  key -= 1 while ((key > 0) && (vals[key] <= vals[key-1]))
  key
end

答案 1 :(得分:2)

Ruby有时可能原谅,但不是关于不存在的运算符:key-- - &gt; key -= 1

你正在使用Ruby,因为它是一种低级语言(如C),一种更惯用(和功能)的方法:

def foo(vals)
  (vals.size - 1).downto(1).detect { |idx| vals[idx] > vals[idx-1] } || 0
end

答案 2 :(得分:1)

Ruby没有--++一元运算符,也没有您尝试使用的while语法。试试这个:

while key > 0 && vals[key] <= vals[key - 1] do key -= 1 end

正如@IgorKapkov建议你也可以转过来,这更像是Rubyish:

key -= 1 while key > 0 vals[key] <= vals[key - 1]