首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >另一种方法中的类方法?

另一种方法中的类方法?
EN

Stack Overflow用户
提问于 2016-04-06 05:23:48
回答 1查看 69关注 0票数 2

下面是workflow gem中的一个方法定义。

代码语言:javascript
复制
   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

代码语言:javascript
复制
      class << self
        return workflow_spec if workflow_spec
      end

相当于(一类方法):

代码语言:javascript
复制
     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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-06 05:29:14

在上面的例子中没有定义任何东西。有一个对类方法workflow_spec的调用,如果它返回truthy,则对它进行后续调用。

此外,在你贴出的剪贴画里的评论中描述了这种行为。

密码

代码语言:javascript
复制
  class << self
    return workflow_spec if workflow_spec
  end

几乎相当于:

代码语言:javascript
复制
  return self.class.workflow_spec if self.class.workflow_spec

workflow中的代码与上面的代码之间的区别是,workflow gem调用的是一个特征类,而不是一个公共类。

与此完全相同的是:

代码语言:javascript
复制
eigenclass = class << self; self; end
return eigenclass.workflow_spec if eigenclass.workflow_spec

或(贷记@Jordan):

代码语言:javascript
复制
return singleton_class.workflow_spec if singleton_class.workflow_spec
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36442207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档