Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby类方法继承,如何阻止子方法执行?_Ruby_Ruby On Rails 3_Oop - Fatal编程技术网

Ruby类方法继承,如何阻止子方法执行?

Ruby类方法继承,如何阻止子方法执行?,ruby,ruby-on-rails-3,oop,Ruby,Ruby On Rails 3,Oop,这个问题属于RubyonRails问题,但这个简化的问题将为我提供我正在寻找的解决方案 我有两个类,子类继承父方法,但是如果父方法中满足某些条件,我想将子方法代码的执行减半 class A def test_method puts 'method1' return false end end class B < A def test_method super #return false was called in parent metho

这个问题属于RubyonRails问题,但这个简化的问题将为我提供我正在寻找的解决方案

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

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
有人知道如何实现我期望的输出吗


谢谢

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

class B < A
  def test_method
    if super
      puts 'method2'
    end
  end
end
B类
现在,
B#test_方法
将返回
false
,如果super返回
false
。否则,它将计算
if end
块中的代码

B类class B < A
  def test_method
    super and puts 'method2'
  end
end
def测试方法 超级和“方法2” 结束 结束 如果super不是
nil
false

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


看看这个。

谢谢。当你看到它时,答案就简单多了!