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

标签 ruby enumerable any

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

相关文章:

c# - 请解释 System.Linq.Enumerable.Where(Func<T, int, bool> predicate)

Python:在any()函数中扩展迭代器变量的范围

ruby - 有没有更简洁的方法在 Ruby 中调用 map 上的外部方法?

ruby - 如何确保一次只运行一个 Ruby 脚本实例?

ruby - 除了 ruby​​ on rails 之外,您可以将 ruby​​ 用于网页吗?

rust - 使用 Any 特征获取对包含引用的结构的引用时的生命周期问题

ios - 如何定义一个可能是两个对象之一的 var?

ruby - Ruby 的字符串文字并置功能的正式记录在哪里?

ruby - 为什么模块调用的 block 无法修改 Ruby 中实现类的对象?

c# - 为什么这个 IEnumerable 扩展方法比另一个(更简单的)扩展方法(只迭代输入)慢得多?