2013-10-28 24 views
0

我了解Ruby的语法糖是如何让我们的值赋给一个变量这样效仿Ruby的索引访问,[]

o = ExampleClass.new 
o.name = "An object" 

ExampleClass有一个方法:

name=(new_name) 

这是如何工作的对于像Hash这样的课程?如果我想要这样做,我会如何命名我的方法?

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

我不是继承Hash类。

回答

3

你只需有方法

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

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

谢谢!! Ruby is awesome –

+0

@ x-treme请记住,您可以“接受”此答案来奖励回答者,并让其他用户在将来知道此答案最能解决您的问题。 – Phrogz

+0

感谢@Phrogz的领导 –

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