싱글 톤 방법이 객체 레벨에서 루비에서 어떻게 작동하는지 이해하기가 어렵습니다. 간단한 Person 클래스를 정의하고 싱글 톤 메소드와 인스턴스 메소드를 추가하고 해당 객체의 eigenclass 객체 ID에 액세스하려고하면 다른 ID를 반환합니다. 여기에 내 테스트 코드가있다.싱글 톤 방법이 루비에서 어떻게 작동하는지 이해하는 데 문제가 있습니다.
class Person
attr_accessor :someAccessor
def method1
puts "instance object id of Person = #{self.object_id}"
puts "Eigenclass object id of person instance object
#{(class << self; self;end).object_id}" #Line 8 - object id 22609690
end
puts "Person eigenclass object id #{(class << self; self;end).object_id}"
def self.printSingletonPersonObjectId
puts self.object_id
end
class << Person
puts "Inside Person eigenclass and its object id #{self.object_id}" #line 19 - 22609860
def uniqueForAllPeople
puts "Person eigenClass object id accessing from a Person class
class method #{self.object_id}" #Line 23 - 22609840
end
end
end
prsn1 = Person.new
class << prsn1
def prsn1_specific_method
puts "prsn1 object eigen class's object id #{self.object_id}" #Line 35 - 22609820
end
end
은 이제 Person 객체 인스턴스의 싱글 톤 클래스에 메소드 prsn1_specific_method를 추가하고 (8 호선)가에서 그 개체 ID에 액세스 할 수 있습니다. 그런 다음 인스턴스 메서드 메서드 1 내가 맞으면 동일한 고유 클래스 (35 행)에 액세스합니다. (줄 번호가 정확하지 않을 수 있으므로 명확하게 설명했습니다.) 두 객체 ID가 동일한 싱글 톤 클래스의 일부인 경우 prsn1 개체 인 이유는 무엇입니까?
또한 Person 클래스의 Line 19 오브젝트 ID와 Line 23 오브젝트 ID는 Person 클래스 용으로 작성된 동일한 싱글 톤 클래스의 일부인 경우에도 서로 다릅니다. 개체 ID 액세스에 문제가 있습니까? 클래스 객체가 특정 객체에 대해 싱글 톤 메소드가 생성 될 때 어떻게 연관되는지에 대해 더 잘 설명해 줄 수 있으면 제발.
한가지 더, '싱글 톤'을 필요로하지 않고 싱글 톤을 모듈로 사용하지 않고 배열 수백 개를 만들었더라도 (배열 클래스라고도 함) 추가 할 수있는 사용자 지정 메서드를 만들 필요가 있습니다. 사물.
감사