模仿ruby的索引访问器,[]

时间:2013-10-28 18:18:59

标签: ruby hash syntactic-sugar

我理解Ruby的语法糖如何让我们为这个变量赋值

o = ExampleClass.new
o.name = "An object"
ExampleClass有方法时

name=(new_name)

这对Hash这样的课程有何用处?如果我想这样做,我如何命名我的方法?

h = MyHash.new
h[:key] = value

我不是继承Hash类。

2 个答案:

答案 0 :(得分:3)

你可以拥有方法

def [](key_to_retrieve)
   #return corresponding value here
end

def []=(key_to_set, value_to_set)
   #set key/value here
end

答案 1 :(得分:1)

JacobM几乎回答了这个问题;但是我想补充一些关于可变类的内容。

你可能会发现这很有趣。您可以使用Struct快速定义可变类:

MyHash = Struct.new(:x, :y)
#This creates a new class MyHash with two instance variables x & y
my_obj = MyHash.new(3, 4)
#=> #<struct MyHash x=3, y=4>
my_obj[:x] = 10
#=> #<struct MyHash x=10, y=4>
my_obj.y = 11
#=> #<struct MyHash x=10, y=11>

这会自动使[]=

的实例变量可读可写可变

您可以随时打开课程以添加一些新内容;

class MyHash
  def my_method
    #do stuff
  end
  def to_s
    "MyHash(#{x}, #{y})"
  end
end