Ruby:开放模块的单例

随机位

因此,在Ruby类中,您可以使用如下习语class << self

class SalesOrganization
  def self.find_new_leads
    ...
  end
  class << self
     include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
     add_transaction_tracer :find_new_leads, :category => :task
  end
end

我的问题是,如果SalesOrganization实际上是aModule而不是Class这是在做我希望做的事,还是我打开了一些我不应该涉足的黑魔法?

# Potentially terrible code
module SalesOrganization
      def self.find_new_leads
        ...
      end
      class << self
         include ::NewRelic::Agent::Instrumentation::ControllerInstrumentation
         add_transaction_tracer :find_new_leads, :category => :task
      end
end

如何访问模块单例课程?

约拿卜

不,您没有释放任何黑魔法。您可以在任何对象(包括模块(Module的实例))上定义单例方法

module M; end

def M.a
  "a"
end

M.a  # => "a"

您建议的方法也有效:

module M
  def self.b
    "b"
  end
end

M.b  # => "b"

module M
  class << self
    def c
      "c"
    end
  end
end

M.c  # => "c"

instance_eval如果直到运行时才知道方法定义,也可以使用

module M; end

M.instance_eval <<EOF
  def d
    "d"
  end
EOF

M.d  # => "d"

当然,像这样的模块NewRelic...可能会对它们所包含的类/模块做出假设,因此您必须在此处格外小心。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Javascript单例继承

来自分类Dev

单例带参数

来自分类Dev

Ruby模块可以描述为单例类吗?

来自分类Dev

保存并加载单例

来自分类Dev

UVM相单例

来自分类Dev

ruby创建单例类的场景是什么

来自分类Dev

Java单例用法

来自分类Dev

模块模式真的必须是单例吗?

来自分类Dev

从对象文字到模块模式的单例,代码组织的利弊

来自分类Dev

毕加索单例用法

来自分类Dev

如何在带有2种不同实现的dagger模块中提供单例

来自分类Dev

Ruby:在不同的上下文中执行单例方法

来自分类Dev

在Ruby中以单例实例化对象一次

来自分类Dev

Guice:在创建模块之前实例化一个单例

来自分类Dev

单例事件

来自分类Dev

在扩展自身的模块的实例方法内调用单例方法

来自分类Dev

Angular 2如何使单例服务可用于延迟加载的模块

来自分类Dev

JPA:单例实体

来自分类Dev

Ruby on Rails:引用路由中的单例类动作

来自分类Dev

AngularJS共享服务不充当模块之间的单例

来自分类Dev

反射:将内部类的模块镜像混合到一个单例对象中

来自分类Dev

Java与Ruby的单例等效

来自分类Dev

ruby创建单例类的场景是什么

来自分类Dev

需要外部输入的Node.js单例模块模式

来自分类Dev

如何跨文件编写单例节点模块?

来自分类Dev

如何访问 Play 2.5 scala 中模块使用的单例类中的变量

来自分类Dev

C/C++ - 如何在 Apache HTTP Server 中制作单例连接模块?

来自分类Dev

单例字典不是单例

来自分类Dev

Ruby:单例类真的拥有匿名类吗?