红宝石方括号设定器/吸气器

时间:2014-03-03 22:17:54

标签: ruby

Ruby可以为类定义这样的setter和getter,可以与[]()或smth一样使用吗?例如。

word.meaning[:english] = "ruby"
puts word.meaning[:german] # "Rubin"

请注意,word.meaning不能是哈希值! :english:german是setter / getter meaning的其他参数。

1 个答案:

答案 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'