1

在覆盖 super 时如何有条件地执行某些操作,同时仍然返回 super 的结果?我确信在 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 回答