这是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
。
答案 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