我有一个接受方法作为参数的方法:
def acceptor_method(received_method)
an_arry.each do |attr|
received_method if some_condition
end
end
如果所有received_method
所做的都是通过某些代码运行的话,那么这很有效:
def some_method
do_something
end
相当于:
def acceptor_method(received_method)
an_arry.each do |attr|
do_something if some_condition
end
end
但是,如果我希望received_method
打破循环并返回一个值,如下所示:
def acceptor_method(received_method)
an_arry.each do |attr|
return true if some_condition
end
end
不幸的是,这不起作用:
def some_method
return true
end
因为它仅对some method
返回true,而不是acceptor_method
- 它继续在循环中播放。
那么有没有办法发送一个方法,当运行时相当于return true
?
答案 0 :(得分:2)
您可以使用块而不是方法来执行此操作。见How can I return something early from a block?
基本上,如果你有一个break value
和yield
的阻止,该函数将返回value
。不幸的是我没有看到使用方法的方法,因为Ruby真的不喜欢在块或循环之外使用break
。
答案 1 :(得分:2)
def acceptor_method
[1, 2, 3, 4].each do |attr|
ret = yield attr
puts attr
end
end
test = acceptor_method do |attr|
break 'test' if attr == 3
end
puts test
输出:
1
2
test