闭括号ruby方法

时间:2017-04-07 20:44:49

标签: ruby loops

有人可以解释是什么让这个方法在第一对之后退出循环?

  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("{}{}")

2 个答案:

答案 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次。