kayawari
3/28/2018 - 3:14 PM

superでスーパークラスのメソッドの返り値とかを操作

superとtapの組み合わせ superの戻り値に手を加えたい時に使えそう

参考 http://d.hatena.ne.jp/lettas0726/20110331/1301578221 https://qiita.com/setsuna82001/items/75d6b1ae7e7d58cd29b7

class H
  def hoge
    'hoge'
  end
  
  def array_print(arr=%w(hoge fuga))
    arr
  end
end

class F < H
  def hoge
    super.tap{ |str| str << 'fuga' }
  end
  
  def array_print(arr2)
    # super()で引数で渡したarr2を使わない
    super().tap{ |arr| arr.pop }
  end
end

f = F.new
p f.hoge #=> 'hogefuga'
p f.array_print(%w(fuga fuga)) #=> '["hoge"]'