Ruby可以为类定义这样的setter和getter,可以与[]
或()
或smth一样使用吗?例如。
word.meaning[:english] = "ruby"
puts word.meaning[:german] # "Rubin"
请注意,word.meaning
不能是哈希值! :english
,:german
是setter / getter meaning
的其他参数。
答案 0 :(得分:2)
是的,可以做到。您需要定义[]=
和[]
方法。
在此示例中,我使用Hash
作为内部数据结构 - 您可以随意使用任何您喜欢的内容。
class Word
attr_reader :meaning
def initialize
@meaning = Meaning.new
end
end
class Meaning
attr_reader :h
def initialize
@h = {}
end
def []=(key, value)
@h[key] = value
end
def [](key)
@h[key]
end
end
示例:
word = Word.new
word.meaning[:english] = 'Hello'
word.meaning[:english] # => 'Hello'