我在我的IRB中玩singleton class
。这样做尝试了以下片段。`singleton`方法在Ruby中驻留在哪里?
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
或not.But发现它不存在there.Then我的问题是 - 哪里那些singleton_method
居住在红宝石?
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
实例或不与子类的singleton class
,像普通类以上的部分。但是我发现的答案是否定的。 它背后的概念或理论或目的是什么?
再次在下面的代码中,我可以看到在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
为什么他们住在哪里很重要?他们工作起来不是更重要吗?如果对你来说真的很重要,请查看源代码。 – 2013-03-16 16:32:39
我认为@iAmRubuuu想要了解单身人士课程。 – 2013-03-16 16:34:54
顺便说一句,我会在几天后发布一篇博文,并会尝试回答这些问题。 – 2013-03-16 16:35:44