模块:Mongo::Id Private

包含在:
MonitoringProtocol::MessageServer::Connection
定义于:
build/Ruby-driver-v 2.19 /lib/mongo/id.rb

Overview

该模块是私有 API 的一部分。 您应尽可能避免使用此模块,因为它将来可能会被删除或更改。

该模块抽象了为类的实例生成连续唯一整数 ID 的功能。 它在包含它的类上定义了方法 #next_id。 该实施确保即使从多个线程调用时,ID 也是唯一的。

包含ID的类不应直接访问“@@id”或“@@id_lock”;相反,他们应该在 `#initialize` 中调用 `#next_id` 并将结果保存在正在创建的实例中。

例子:

包括ID模块。

class Foo
  include Mongo::Id
end

f = Foo.new
foo.next_id # => 1
foo.next_id # => 2

将ID保存在包含类的实例中。

class Bar
  include Mongo::Id

  attr_reader :id

  def initialize
    @id = self.class.next_id
  end
end

a = Bar.new
a.id # => 1
b = Bar.new
b.id # => 2

由于:

  • 2.7.0

类方法摘要折叠

类方法详细信息

included (klass) ⇒对象

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

由于:

  • 2.7.0



56
57
58
59
60
61
62
63
64
65
66
67
# File ' 构建/ruby-driver-v2.19/lib/ mongo /id.rb', 第56行

def self.包含(klass)
  klass.class_variable_set(:@@id, 0)
  klass.class_variable_set(:@@id_lock, 互斥锁.new)

  klass.define_singleton_method(:next_id) do
    klass.class_variable_get(:@@id_lock).同步 do
      id = class_variable_get(:@@id)
      klass.class_variable_set(:@@id, id + 1)
      klass.class_variable_get(:@@id)
    end
  end
end