我在ruby中编写了一个类,我希望定义方法[]来访问其成员(所有成员都是公共的)。例如,对于以下简单类:
class Boy
attr_accessor :name, :age
def initialize(n, a)
@name = n
@age = a
end
end
我希望以下内容相同
b = Boy.new(Tom, 23)
b.name # Tom
b[:name] # Tom
请帮忙吗?提前致谢
答案 0 :(得分:1)
class Boy
attr_accessor :name, :age
def initialize(n, a)
@name = n
@age = a
end
def [](key)
instance_variable_get(key)
end
end
b = Boy.new("Tom", 23)
b.name # Tom
b[:@name] # Tom
或者
class Boy
attr_accessor :name, :age
def initialize(n, a)
@name = n
@age = a
end
def [](key)
public_send(key)
end
end
b = Boy.new("Tom", 23)
b.name # Tom
b[:name] # Tom
如果你想定义[] =方法,
对于第一种风格:
def []=(key, value)
instance_variable_set(key, value)
end
对于第二种风格:
def []=(key, value)
public_send(key.to_s + '=', value)
end