有人可以解释是什么让这个方法在第一对之后退出循环?
def closed_parens(string)
chars = string.split(//)
chars.each_with_index do |c, i|
if c == "("
chars.shift
if chars[0] != ")"
return false
else
chars.shift
end
elsif c == "{"
chars.shift
if chars[0] != "}"
return false
elsif
chars.shift
end
elsif c == "["
chars.shift
if chars[0] != "]"
return false
else
chars.shift
end
end
end
if chars.length > 0
return false
else
return true
end
end
closed_parens("{}{}")
答案 0 :(得分:1)
在迭代它时,您不希望在Enumerable对象上使用shift
。
您可能需要查看Enumerable#each_cons方法,您可以在其中执行类似
的操作[your enumerable item].each_cons(2) do |current_item, next_item|
# do some work...
end
答案 1 :(得分:0)
事实上,当你迭代它时,你在数组上调用shift
。
例如:
[1] pry(main)> a = [1,2,3,4]
=> [1, 2, 3, 4]
[2] pry(main)> a.each { puts a.shift }
1
2
=> [3, 4]
[3] pry(main)>
each
不运行4次,因为班次只运行2次。