ruby – Super.tap {} – 它做什么和用例?

前端之家收集整理的这篇文章主要介绍了ruby – Super.tap {} – 它做什么和用例?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了一个宝石的建筑,不明白的意图.
我知道什么tap单独,但是为什么有人会叫super.tap {},而不是在超级调用后正常地继续执行代码.
def my_method
 super.tap do |u|
    if @user && @user.new_record?
      @omniauth = u.session[:session]
      u.session[:omniauth] = nil unless @user.new_record?
    end
  end
end

任何人都可以启发我吗?

解决方法

super.tap只不过是在任何超级回报上调用tap方法.用户dmnd已经很好地解释了tap(为什么downwote?).超级调用你所覆盖的祖先类的方法.

因此,您粘贴的代码与以下内容相当:

original_result = super
if @user && @user.new_record?
  @omniauth = original_result.session[:session]
  original_result.session[:omniauth] = nil unless @user.new_record?
end
return original_result

基本上,super.tap可以用于从继承的类包装方法,添加一些功能,但保留结果.

猜你在找的Ruby相关文章