3

学術的な理由から、Ruby クラスのインスタンスをハッシュのように動作させたいと考えています。

目標

  1. MyClass インスタンスをハッシュで初期化 # 成功
  2. ハッシュのように、myClass のインスタンスから値を要求します # 成功
  3. 次に、プロパティをハッシュとして設定します # 失敗

いくつかの議論が存在しますが、私はそこにあるもの ( 12 )を試しましたが、成功しませんでした。私が間違っていることを教えてください。ありがとう!

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}>
4

3 に答える 3

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}
于 2013-09-21T23:48:52.380 に答える
1

として書く必要がtest = MyClass.new({:a => 3})あり、以下のコードが機能するはずです。

class MyClass
  attr_accessor :my_hash

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

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

end

test = MyClass.new({:a => 3})
test[:a]                          
test[:b]= 4 
test.my_hash # => {:a=>3, :b=>4}
于 2013-09-21T23:46:03.783 に答える