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--
^
有什么想法吗?
答案 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]