簡體   English   中英

如何在某些條件下覆蓋ruby gem的方法?

[英]How to override a method of a ruby gem for certain conditions?

我只是在滿足某些條件時試圖覆蓋gem的一個私有方法。

我想只在滿足某個條件時才使用此方法,否則使用gem的方法。

module Net
  class FTP
    def makepasv
      if condition
        @sock.peeraddr[0] == 'AF_INET' ? parse229(sendcmd('EPSV')) : parse227(sendcmd('EPSV'))
      else
        super
      end
    end
  end
end

你可以prepend被重寫的類,然后使用條件。 這樣,您的模塊將成為祖先鏈中的最后一個,並且能夠調用super以使用默認行為

例如

module Override 
  def to_s(*) 
    if self == 'a'
      "===a===" 
    else 
      super 
    end
  end 
end
String.prepend(Override)

[9] pry(main)> String.new("a")
=> "a"                                                                                                            
[10] pry(main)> String.new("a").to_s
=> "===a==="
[11] pry(main)> String.new("b").to_s
=> "b"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM