我仅在满足某些条件时才尝试覆盖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
答案 0 :(得分:3)
您可以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"