내 IRB에서 singleton class
으로 게임하고있었습니다. 그리고 그렇게하는 것은 아래 발췌 문장을 시도했습니다. 나는 위의 여기`singleton` 메소드는 어디에 있습니까?
class Foo ; end
#=> nil
foo = Foo.new
#=> #<Foo:0x2022738>
foo.define_singleton_method(:bar , method(:puts))
#=> #<Method: Object(Kernel)#puts>
는 클래스 Foo
의 인스턴스에서 singleton
방법을 만들었습니다.
foo.bar("hi")
hi
#=> nil
foo.singleton_methods
#=> [:bar]
foo_sing = foo.singleton_class
#=> #<Class:#<Foo:0x2022738
foo_sing.is_a? Class
#=> true
foo_sing.instance_of? Class
#=> true
foo_sing.inspect
#=> "#<Class:#<Foo:0x1e06dc8>>"
위에서 나는 클래스
Foo
의 예에
singleton class
을 만들려고. 또한
foo_sing
이
Foo
인스턴스의
singleton class
에 대한 참조를 보유하고 있는지 테스트합니다.
foo_sing.methods(false)
#=> []
foo_sing.methods.include? :bar
#=> false
위에서 singleton_method
bar
이 foo_sing
에 있으면 나는보고 있었다 또는 아뇨하지만 내 질문은 there.Then가 존재하지 발견 - 그 singleton_method
루비에 어디에 존재 하는가? 우리는 일반 클래스처럼, singleton class
의, singleton class
의 예 여부와 서브 클래스를 만들 수 있는지가 확인 된 위의 부분에서
foo_sing.new.methods(false)
#TypeError: can't create instance of singleton class
# from (irb):10:in `new'
# from (irb):10
# from C:/Ruby193/bin/irb:12:in `<main>'
class Bas < foo_sing ; end
#TypeError: can't make subclass of singleton class
# from (irb):16
# from C:/Ruby193/bin/irb:12:in `<main>'
. 하지만 내가 찾은 답은 아니오. 개념이나 이론 또는 목적은 무엇입니까?
다시 다음 코드에서 동일한 이름 메서드가 singleton class
에서 재정의되는 것을 볼 수 있습니다. 그러나 위의 질문에서 찾을 수없는 클래스 내의 메소드를 검색 할 때.
class Foo ; end
#=> nil
foo = Foo.new
#=> #<Foo:0x225e3a0>
def foo.show ; puts "hi" ; end
#=> nil
foo.show
#hi
#=> nil
class << foo ;def show ; puts "hello" ; end ;end
#=> nil
foo.show
#hello
#=> nil
왜 살고있는 곳에서 중요합니까? 그들이 일하는 것이 훨씬 더 중요하지 않습니까? 정말 중요한 경우 소스 코드를 살펴보십시오. –
@iAmRubuuu는 싱글 톤 클래스에 대한 이해를 얻고 싶다고 생각합니다. –
BTW, 며칠 후에 블로그 게시물을 게시하고 이에 대한 답변을 시도 할 것입니다. –