gpt4 book ai didi

ruby - 从外部方法在 ruby​​ 循环上调用 next

转载 作者:数据小太阳 更新时间:2023-10-29 06:44:01 25 4
gpt4 key购买 nike

在 Ruby 中很容易告诉循环转到下一个项目

(1..10).each do |a|
next if a.even?
puts a
end

结果=>

1
3
5
7
9

但是如果我需要从循环外调用 next(例如:方法)怎么办

def my_complex_method(item)
next if item.even? # this will obviously fail
end

(1..10).each do |a|
my_complex_method(a)
puts a
end

我找到并有效的唯一解决方案是使用 throw & catch 就像在 SO 问题 How to break outer cycle in Ruby? 中一样

def my_complex_method(item)
throw(:skip) if item.even?
end

(1..10).each do |a|
catch(:skip) do
my_complex_method(a)
puts a
end
end

我的问题是:有人有更好的解决方案来做到这一点吗??或者 throw/catch 是唯一的方法吗??

另外,如果我想调用 my_complex_method 不仅作为该循环的一部分(=> 不要抛出 :skip),我能以某种方式告诉我的方法它是从循环中调用的吗?

最佳答案

你的复杂方法可以返回一个 bool 值,然后你像这样在你的循环中进行比较:

def my_complex_method(item)
true if item.even?
end

(1..10).each do |a|
next if my_complex_method(a)
puts a
end

一种简单的方法,但不同于 try catch 方法。

更新

因为 item.even? 已经返回一个 bool 值,你不需要 true if item.even? 部分,你可以按如下方式做:

def my_complex_method(item)
item.even?
end

关于ruby - 从外部方法在 ruby​​ 循环上调用 next,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17546516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com