모듈: Mongo::Id Private

포함 항목:
모니터링, Protocol::Message, Server::Connection
다음에 정의됨:
build/ruby-driver-v2.19/lib/mongo/id.rb

개요

이 모듈은 비공개 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

클래스 메서드 요약 접기

클래스 메서드 세부 정보

.include(klass) ⇒ 객체

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

이후:

  • 2.7.0



56
57
58
59
60
61
62
63
64
65
66
67
# 파일 ' 빌드/ Ruby-driver-v2.19/lib/mongo/id.rb', 줄 56

def self.포함(class)
  class.class_variable_set(:@@id, 0)
  class.class_variable_set(:@@id_lock, 뮤텍스.신규)

  class.정의_싱글톤_메서드(:next_id) do
    class.class_variable_get(:@@id_lock).동기화 do
      id = class_variable_get(:@@id)
      class.class_variable_set(:@@id, id + 1)
      class.class_variable_get(:@@id)
    end
  end
end