另一个方法里面的类方法?

时间:2016-04-06 05:23:49

标签: ruby

这是workflow gem中的方法定义。

   def spec
      # check the singleton class first
      class << self
        return workflow_spec if workflow_spec
      end

      c = self.class
      # using a simple loop instead of class_inheritable_accessor to avoid
      # dependency on Rails' ActiveSupport
      until c.workflow_spec || !(c.include? Workflow)
        c = c.superclass
      end
      c.workflow_spec
    end

      class << self
        return workflow_spec if workflow_spec
      end

相当于(一个类方法):

     class << self
       def workflow_spec
         return workflow_spec if workflow_spec
       end
     end

?如果workflow_spec是一种类方法,那么在method中定义它的目的是什么? workflow_spec被称为self.spec.workflow_spec吗?或者只是self.workflow_spec

1 个答案:

答案 0 :(得分:1)

上面的示例中没有定义。如果它返回workflow_spec,则会调用类方法 truthy并对其进行后续调用。

此外;此行为在您发布的剪辑内的评论中描述。

代码

  class << self
    return workflow_spec if workflow_spec
  end

几乎相当于:

  return self.class.workflow_spec if self.class.workflow_spec

workflow中的代码与上面的代码之间的区别在于workflow gem调用eigenclass,而不是普通类。

确切的等价物是:

eigenclass = class << self; self; end
return eigenclass.workflow_spec if eigenclass.workflow_spec

或(@Jordan的信用):

return singleton_class.workflow_spec if singleton_class.workflow_spec