我正在尝试在 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/