将传递给方法的块传递给Ruby中的另一个方法

 到底是谁额额额 发布于 2023-02-09 18:13

我正在尝试编写ruby keep_ifdelete_if数组方法的克隆.这是我的代码.

module Strain
  def keep
    self.inject([]) do |extracts, element|
      yield(element) ? extracts << element : extracts 
    end
  end

  def discard
    self.inject([]) do |extracts, element|
      !yield(element) ? extracts << element : extracts
    end
  end
end

class Array
  include Strain
end

这有效.但我想做的事情如下:

def discard
  self - self.keep &block
end

期望的行为:

[1, 2, 3].discard { |number| number < 2 }
# => [2, 3]

所以我需要传递传递给discard方法的块,然后传递给keep方法.我该如何实现这一目标?

1 个回答
  • 您可以显式引用该块

    def discard(&block)
      self - self.keep(&block)
    end
    

    或含蓄地

    def discard
      self - self.keep(&Proc.new {})
    end
    

    在你的情况下,我会建议第一种方法.

    2023-02-09 18:14 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有