Ruby 从For循环返回到每个迭代器
我想知道是否有可能从传递给Each的块中的for循环返回Ruby中的Each迭代器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
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不支持。