2

メソッドの多くに共通のパターンを持つサブクラスがあります。

if some_condition
  (real code goes here)
else
  super
end

理想的には、次のようにカプセル化したいと思います。

def if_some_condition
  if some_condition
    yield
  else
    (calling method's super)
  end
end

のブランチでsuper呼び出すことができるように、呼び出し元のメソッドをキャプチャする方法はありますか?elseif_some_condition

some_condition(別のサブクラスの使用を提案する前に、そのクラスのオブジェクトの存続期間にわたって頻繁に変更される可能性があることに注意してください。)


編集:

考えられる解決策は次のとおりです。

def if_some_condition(&b)
  if some_condition
    yield
  else
    b.send(:binding).eval('super')
  end
end

evalただし、可能であればの使用は避けたいと思います。

4

1 に答える 1