如何定义像MyObject [:test] ='test'这样的Class方法

时间:2011-04-07 04:17:44

标签: ruby

这是我想要创建的,但它不起作用:

class MyObject
   def self.[]=(key, value)
     @@internal_hash[key] = value 
   end
end

我不明白为什么覆盖自我点括号不起作用。

1 个答案:

答案 0 :(得分:1)

您需要初始化类变量。

class MyObject
  @@internal_hash = {}
  def self.[]=(key, value)
    @@internal_hash[key] = value 
  end
end

这有两个原因。

  1. 实例变量可以在没有初始化的情况下使用,但类变量不能。Programming Ruby:类变量和类方法:类变量:第1段

  2. 即使在没有初始化的情况下能够使用类变量,它也会被隐式初始化为nil,并且您不能突然使用Hash#[]方法。