单例类中的实例变量

时间:2016-10-24 06:00:38

标签: ruby singleton

我有以下代码:

class Fish
# @message = "I can swim"

 class << self
  @message = "I can jump!"
  define_method(:action) { @message }
 end
end


Fish.action  => nil

我取消注释上述@message变量后,Fish.action会返回I can swim。为什么在这两种情况下都忽略了I can jump消息。这是为什么?为什么Fish类被绑定到开头定义的@message但不在singleton类内?

1 个答案:

答案 0 :(得分:5)

这是因为class << self打开课程&#39;单例类上下文:

class Foo
  p self # Foo
  class << self
    p self # #<Class:Foo>
    define_method(:bar) { p self } # Foo
  end
end
Foo.bar

您可以通过以下方式验证:

Fish.singleton_class.instance_variable_get(:@action) # => "I can jump!"