Ruby 从For循环返回到每个迭代器

Ruby 从For循环返回到每个迭代器,ruby,for-loop,block,Ruby,For Loop,Block,我想知道是否有可能从传递给Each的块中的for循环返回Ruby中的Each迭代器 def find member = "" productHash = {} #@entries is a hash, with both the keys and values being strings #the member parameter is a string @entries.each do |key, value

我想知道是否有可能从传递给Each的块中的for循环返回Ruby中的Each迭代器

def find member = ""

        productHash = {}

            #@entries is a hash, with both the keys and values being strings
            #the member parameter is a string

        @entries.each do |key, value|

            for i in 0...member.size

                if(key[i] != member[i])
                    next #the next keyword doesn't work...all it does is return to the for iterator.  I'm looking for a keyword that would return to the each iterator, and allow each to pass back in the next key-value pair.
                end

            end

            productHash[key] = value


        end

        productHash

end

我试图做到的是:当我看到成员参数中的字符与给定键中的对应字符不匹配时,我就转到下一个键值对

看起来您正在尝试进行某种比较,如果键与
成员指定的特定前缀匹配,则您将进行赋值

该代码在功能上应类似:

def find(member = "")
  hash = { }

  @entries.each do |key, value|
    # Unless key begins with prefix, skip it.
    next unless (key[0, prefix.length] == prefix)

    hash[key] = value
  end

  hash
end
Ruby中没有官方的
goto
语句,许多人认为这是一件好事,但这意味着打破嵌套块可能有点棘手

尽管如此,如果你以正确的方式处理问题,几乎总会有一个足够优雅的解决方案

更新:

要打破嵌套循环,一种方法可能是:

list.each do |i|
  broken = false

  inner_list.each do |j|
    if (j > 10)
      broken = true
      break
    end
  end

  break if (broken)
end

看起来您正在尝试进行某种比较,如果键与
member
指定的特定前缀匹配,则您将进行赋值

该代码在功能上应类似:

def find(member = "")
  hash = { }

  @entries.each do |key, value|
    # Unless key begins with prefix, skip it.
    next unless (key[0, prefix.length] == prefix)

    hash[key] = value
  end

  hash
end
Ruby中没有官方的
goto
语句,许多人认为这是一件好事,但这意味着打破嵌套块可能有点棘手

尽管如此,如果你以正确的方式处理问题,几乎总会有一个足够优雅的解决方案

更新:

要打破嵌套循环,一种方法可能是:

list.each do |i|
  broken = false

  inner_list.each do |j|
    if (j > 10)
      broken = true
      break
    end
  end

  break if (broken)
end


为什么要使用for循环?你为什么不用一个块来做一个each方法呢?@jason328这会有什么帮助?我相信问题还是一样的。我在这里使用for循环的原因是为了跟踪索引号,以便与参数“member”中的相应字符进行比较。从概念上讲,我的问题是返回语句(如break、next、return)是否区分for循环迭代器和each迭代器。我很难理解您的问题。使用带有索引的
是否会对您有所帮助?什么是
成员
?数组?看起来像。我怀疑这是伪代码,因为如果不添加一些参数,该方法将无法工作。为什么要使用for循环?你为什么不用一个块来做一个each方法呢?@jason328这会有什么帮助?我相信问题还是一样的。我在这里使用for循环的原因是为了跟踪索引号,以便与参数“member”中的相应字符进行比较。从概念上讲,我的问题是返回语句(如break、next、return)是否区分for循环迭代器和each迭代器。我很难理解您的问题。使用带有索引的
是否会对您有所帮助?什么是
成员
?数组?看起来像。我怀疑这是伪代码,因为如果不添加一些参数,该方法将无法工作。非常感谢!只是为了验证,在我的代码中,是否没有办法从for循环中退出到每个迭代器?老实说,除了以前使用过Ruby的人之外,没有人在Ruby中使用
for
。而是使用
each
迭代器或Enumerable中的其他内容。要退出两个级别,
return
通常会起作用,前提是您可以立即退出该方法。或者,设置一个标志并
break
,如果设置了该条件,则再次设置
break
。我用一个简短的例子修改了我的答案。这很有意义。我想我的问题从概念上归结为是否有任何关键字return、break和next在for循环和each方法之间进行了区分。看起来它们没有,所以设置一个标志总是必要的。是的,它们只影响当前的循环上下文。其他一些语言支持带有可选目标标签的
break
,但Ruby不支持。非常感谢!只是为了验证,在我的代码中,是否没有办法从for循环中退出到每个迭代器?老实说,除了以前使用过Ruby的人之外,没有人在Ruby中使用
for
。而是使用
each
迭代器或Enumerable中的其他内容。要退出两个级别,
return
通常会起作用,前提是您可以立即退出该方法。或者,设置一个标志并
break
,如果设置了该条件,则再次设置
break
。我用一个简短的例子修改了我的答案。这很有意义。我想我的问题从概念上归结为是否有任何关键字return、break和next在for循环和each方法之间进行了区分。看起来它们没有,所以设置一个标志总是必要的。是的,它们只影响当前的循环上下文。其他一些语言支持带有可选目标标签的
break
,但Ruby不支持。