如何在Ruby中调用类的所有实例方法?

时间:2015-09-30 18:10:12

标签: ruby selenium

我正在努力将我自己的小测试方法跑步者脚本放在一起。

我需要一些方法来调用类中的所有方法。当我调用 Scanner in = new Scanner(System.in); int max=0; int a = in.nextInt(); for(int i=1;i<a;i++){ for(int j=i+1;j<=a;j++) { int d = i^j; if(d>max) max=d; } } System.out.println(max); 方法时,我的程序陷入无限循环。造成这种情况的原因是什么以及解决方案是什么?

run_tests

1 个答案:

答案 0 :(得分:0)

As mentioned by Wand Makerrun_tests涉及递归。您的代码正在以下列方式执行:

  1. 找到某个对象的类
  2. 致电SomeClass.instance_methods.each {}
  3. 到达run_tests后,再次开始迭代。
  4. 无限循环 - 您永远不会到达其余的实例方法。
  5. 我不确定您是如何设计测试的,所以这里有一些解决问题的方法

    如果所有测试对象都有类FadTest,您可以在迭代中编辑逻辑,我首选的解决方案是what the Tin Man suggested

    klass.instance_methods(false).each do |method|
      next if method == :run_tests
      # ...
    end
    

    唯一的问题是您仍在扫描:run_tests元素。如果您想要保持完整的证明且数组中没有:run_tests,您可以尝试what Cary Swoveland suggested

    (klass.instance_methods(false) - [:run_tests]).each {}
    

    如果测试对象的类不是 FadTest,那么我建议重写该方法。

    def self.run_tests(object)
      klass = object.class
      klass.instance_methods(false).each {}
    end
    
    FadTest.run_tests(some_object)
    
相关问题