如何使Ruby类像Setter一样使用哈希

sur*_*ive 3 ruby setter hash

出于学术原因,我想让Ruby类的实例像哈希一样.

GOALS

  1. 使用hash#success初始化MyClass实例
  2. 从myClass实例请求值,就像hash#success
  3. 然后将属性设置为hash#fail

虽然一些讨论存在的,我想外面的东西(1,2,没有成功).让我知道我做错了什么.谢谢!

class MyClass
  attr_accessor :my_hash

  def initialize(hash={})
    @my_hash = hash
  end

  def [](key)
    my_hash[key]
  end

  def set_prop(key, value)
    myhash[key] = value
  end

end

test = myClass.new({:a => 3})     #=> #<MyClass:0x007f96ca943898 @my_hash={:a=>3}>
test[:a]                          #=> 3 
test[:b] = 4                      #=> NameError: undefined local variable or method `myhash' for #<MyClass:0x007f96ca9d0ef0 @my_hash={:a=>3}>
Run Code Online (Sandbox Code Playgroud)

Ser*_*sev 6

你声明了set_prop,但你[]=在测试中使用.你的意思是这个吗?

class MyClass
  attr_accessor :my_hash

  def initialize(hash={})
    @my_hash = hash
  end

  def [](key)
    my_hash[key]
  end

  def []=(key, value)
    my_hash[key] = value
  end

end

test = MyClass.new({:a => 3})     # success
test[:a]                          # success
test[:b] = 4                      # success

test.my_hash # => {:a=>3, :b=>4}
Run Code Online (Sandbox Code Playgroud)