gpt4 book ai didi

ruby - 如何重新创建任何? Ruby 中的方法

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

我正在尝试在 Ruby 中重新创建可枚举模块。我能做到吗?方法并且难以返回 true 或 false。相反,每个数组项都是 1 乘 1 返回的。这是我的代码:

def my_any?
return self.to enum unless block_given?
self.each do |i|
return true if i == yield(i)
end
end

nums = [3,5,7,3,6,10,20,16]

puts nums.my_any?{|x|x==6}

有什么地方出错了吗?

最佳答案

您的代码存在三个问题:您应该在没有阻塞的情况下调用此方法时返回一个枚举器,您应该检查 yield 返回的内容,并且您应该显式返回 false 失败时:

def my_any?
return to_enum(:my_any?) unless block_given?
each { |i| return true if yield(i) }
false
end

nums = [3,5,7,3,6,10,20,16]

puts nums.my_any? { |x| x == 6 }
#⇒ true
lazy = nums.my_any?
lazy.each { |x| x == 6 }
#⇒ true

或者,我最好使用break:

def my_any?
return to_enum(:my_any?) unless block_given?

each { |i| break true if yield(i) } == true
end

关于ruby - 如何重新创建任何? Ruby 中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51784971/

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