如何从ruby块中突破?

这里是栏#做事

类栏
做什么
Foo.some_方法(x)do|x|
做点什么
如果y坏了,返回y坏了吗我如何告诉它停止并返回Dou_东西?
y、 你还有别的事吗
终止
继续做更多的事情
终止
终止

下面是一些方法:

类Foo
定义自我。某些方法(目标和块)
目标。每个人都做|目标|
开始
r=收益率(目标)
营救
失败&lt&书信电报;目标
终止
终止
终止
终止

我曾考虑过使用raise,但我正在尝试使其通用化,因此我不想在Foo中添加任何特定内容

使用关键字next。如果不想继续下一项,请使用break

当在块中使用next时,它会导致块立即退出,将控制权返回到迭代器方法,迭代器方法随后可以通过再次调用块来开始新的迭代:

f.每个do | line |#迭代文件f中的行
如果下一行[0,1]=“#”#如果这一行是注释,请转到下一行
放置评估(行)
终止

在块中使用时,break将控制权从块、从调用块的迭代器转移到调用迭代器后的第一个表达式:

f.每个do | line |#迭代文件f中的行
如果行==“退出\n”#如果执行此break语句。。。
放置评估(行)
终止
把“再见”#…然后控制权转移到这里

最后,在块中使用return

return始终会导致封闭方法返回,而不管它在块中嵌套的深度有多深(lambda除外):

def find(数组,目标)
array.each_with_index do|元素,索引|
如果(element==target)返回索引#从find返回
终止
nil#如果没有找到元素,则返回nil
终止

发表评论