1

スーパーの結果を返しながら、スーパーを上書きするときに条件付きで何かを実行するにはどうすればよいですか? Rubyでこれを書くよりクリーンな方法があると確信しています

def my_method
  result = super
  if result.success?
    my_other_method1
    my_other_method2
    if @my_field
      @x = @y
    end
  end

  result
end

ブロックで何かができると信じていますが、まだよくわかりません。任意のポインタをいただければ幸いです。

4

2 に答える 2

3

Ruby 1.9を使用している場合は、Object#tapメソッドを使用してそれを少しきれいにすることができます.

def my_method
    super.tap do |result|
        if result.success?
            my_other_method1
            my_other_method2
            if @my_field
                @x = @y
            end
        end
    end
end
于 2013-02-07T01:39:45.903 に答える
1

次のように実行できます。

def my_method
  super || my_other_method
end
于 2013-02-06T23:47:22.097 に答える