那是我朝阳下的奔跑 -- Ruby的 Monkey Patching 游击布丁

举个例子先:

Ruby array里面有一个each的方法,每次yield一个内容。像是这样:

    ["a", "b", "c"].each{ |str| puts str}

如果我们想每次得到的字符串后面添加一个pipe,我们可以这样:

    ["a", "b", "c"].each{ |str| new_str = str + "|"; puts new_str}

如果我们想把这个pipe做成一个大家都可以用的方法,对每一个array都能使用的方法。我们就可以做一个游击布丁,像这样:

      class Array
          def my_monkey_patch
               each do |e|
                  if e.is_a? String
                    yield e + "!"
                  else
                    yield e
                  end
                end
           end
      end
      
      # 猜猜这两个分别输出什么呢?
      ["a", "b"].my_monkey_patch do |str|
          p str
      end

      [1, 2, 3].my_monkey_patch{ |i| puts i}

这种补丁可以打在instance method上,也可以打在class method上。我一般使用这种patch的时候是想对某个gem的部分类想做个调整。至于什么时候用,不应该经常用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值