Ruby 一个类方法在另一个方法中?
这里是Ruby 一个类方法在另一个方法中?,ruby,Ruby,这里是工作流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
工作流
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
def规范
#首先检查singleton类
类上述示例中未定义任何内容。有一个对class方法workflow\u spec
的调用,如果它返回truthy
,则随后会调用它
此外;这种行为在你发布的剪报中的评论中有描述
代码
class << self
return workflow_spec if workflow_spec
end
workflow
中的代码与上面代码的区别在于workflow
gem调用的是一个,而不是一个普通类
确切的等价物是:
eigenclass = class << self; self; end
return eigenclass.workflow_spec if eigenclass.workflow_spec
它不会检查类方法是否存在。它调用singleton类上的workflow_spec
方法,如果其返回值为truthy,则再次调用该方法并返回其返回的值。我看不出如果workflow_spec
与if self.class.methods.include如何等效?工作流规范
。这不会实际调用该方法两次吗?(即返回self.class.workflow\u spec()如果self.class.workflow.spec()
)@Jordan,Amadan确实,我还需要一杯咖啡。我真丢脸,修正了。@Amadan用self.singleton\u class
替换self.class
,你完全正确。@Jordan:对,谢谢,我只是盲目地复制粘贴。
class << self
return workflow_spec if workflow_spec
end
return self.class.workflow_spec if self.class.workflow_spec
eigenclass = class << self; self; end
return eigenclass.workflow_spec if eigenclass.workflow_spec
return singleton_class.workflow_spec if singleton_class.workflow_spec