gpt4 book ai didi

ruby - Ruby 中是否有 "yield break"的等价物?

转载 作者:太空宇宙 更新时间:2023-11-03 17:25:53 25 4
gpt4 key购买 nike

我编写了以下 Ruby 代码:

def myItems
if @item1
yield @item1
end
if @item2
yield @item2
end
end

现在我尝试使用:

myItems.each do |item|
puts item
end

然而,当@item1 和@item2 都为 nil 时,我得到错误:

Error: #<NoMethodError: undefined method `each' for nil:NilClass>.

我希望在 C# 中使用相当于“yield break”的方法来防止这种情况发生。有谁知道这在 Ruby 中是如何工作的?

最佳答案

很难说出您要做什么,但我认为您只想:

myItems do |item|
puts item
end

您当前的代码假定 myItems 的返回值是可枚举的(例如数组),并且在任何情况下(即使您的 @item 不是 nil )都是返回值。

或者,执行以下任一操作:

# Method that iterates over all items
def eachItem
[@item1,@item2].compact.each do |item|
yield item
end
end

eachItem do |item|
puts item
end

...或者这个:

# Give me an array of all non-nil items
def myItems
[@item1,@item2].compact
end

myItems.each do |item|
puts item
end

注意:我使用了 camelCase方法名称,因为那是您最初拥有的名称,但请注意,在 Ruby 中使用 snake_case 是惯用的相反。

注意 2:将多个相似项存储为实例变量而不是集合似乎不如存储集合本身有用。但是,在不知道您的数据的情况下,我无法提出更好的表示方法。

关于ruby - Ruby 中是否有 "yield break"的等价物?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10556161/

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