3

这个问题与 Ruby on Rails 问题有关,但这个简化的问题将为我提供我正在寻找的解决方案。

我有两个类,子类继承了父方法,但是如果父方法中满足某些条件,我想将子方法代码的执行减半。

class A

  def test_method
    puts 'method1'
    return false
  end

end

class B < A

  def test_method
    super
    #return false was called in parent method, I want code to stop executing here
    puts 'method2'
  end

end

b = B.new
b.test_method

输出是:

method1
method2

我想要的输出是:

method1

有谁知道如何实现我想要的输出?

谢谢!

4

2 回答 2

3

您可以使用简单的if-end语句:

class B < A
  def test_method
    if super
      puts 'method2'
    end
  end
end

现在,如果 super 返回,B#test_method将返回。否则,它会评估块内的代码。falsefalseif-end

于 2013-07-03T22:33:50.383 回答
3
class B < A
  def test_method
    super and puts 'method2'
  end
end

这种方式两者都会运行,如果 super 是除了nilorfalse

或者,您可以使用更强的优先级&&,但这种较低的优先级通常用作流量控制。

请参阅Avdi 的博客文章

于 2013-07-04T02:13:05.590 回答