【问题标题】:Difficulty understanding RubyMonk exercise called "Whodunnit" involving superclasses难以理解 RubyMonk 练习,称为“Whodunnit”,涉及超类
【发布时间】:2015-05-17 14:43:30
【问题描述】:

我正在尝试了解 RubyMonk 练习的解决方案。大部分代码我都可以看,但是下面这行不行,

while not (superclass = klass.superclass).nil?

这是否会创建一个名为“superclass”的变量以在“while not 循环”的其余部分中使用,然后同时将其测试为 != nil?

完整解决方案

def location_in_hierarchy(object, method)
  klass = object.class
  ancestors = [klass]
  while not (superclass = klass.superclass).nil?
    ancestors << superclass
    klass = superclass
  end
  ancestors.reverse.find do |ancestor| 
    ancestor.instance_methods.include?(method)
  end
end

link to exercize

我已经学习 Ruby 几个星期了。但在过去的一个小时里,我一直在关注这个解决方案。任何理解这条线的帮助都将非常感激。

【问题讨论】:

    标签: ruby while-loop superclass


    【解决方案1】:

    您可以在 irb 中进行测试。如果对象是“a”:

    irb(main):009:0> 'a'.class
    => String
    irb(main):010:0> 'a'.class.superclass
    => Object
    irb(main):011:0> Object.superclass
    => BasicObject
    irb(main):013:0> BasicObject.superclass
    => nil
    

    所以如果klass.superclass 为零(klass 为零),循环将结束。

      while not (superclass = klass.superclass).nil?
        ancestors << superclass
        klass = superclass
      end
    

    你可以这样理解:

       superclass = klass.superclass
       while not superclass.nil?
        ancestors << superclass
        klass = superclass
        superclass = klass.superclass
      end
    

    如你所说,它创建一个名为'superclass'的变量,然后检查它是否为nil,如果为nil,则while()循环结束,或者将klass.superclass分配给它。

    【讨论】:

      【解决方案2】:

      这是否创建了一个名为“超类”的变量以在其余部分中使用 'while not loop',然后同时将其测试为 != nil?

      是的。 (blahblah).nil? 是循环条件,而superclass 的值在每次迭代中使用。

      while not (superclass = klass.superclass).nil?
      

      这只是一种遍历object 的所有父类(祖先)的方法。循环将一直运行到superclass == BasicObject(即klass.superclass == nil),并且在每次迭代中,每个超类的名称都被推入ancestors

      【讨论】:

        猜你喜欢
        • 2014-07-01
        • 1970-01-01
        • 2013-11-12
        • 2015-05-09
        • 2017-11-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多