代码之家  ›  专栏  ›  技术社区  ›  xaxa

红宝石方括号setter/getter[已关闭]

  •  0
  • xaxa  · 技术社区  · 11 年前

    在Ruby中是否可以为类定义这样的setter和getter [] () 或smth相似?例如。

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

    请注意 word.meaning 不能是哈希!和 :english , :german 是setter/getter的一种附加参数 meaning .

    1 回复  |  直到 11 年前
        1
  •  2
  •   Kyle    11 年前

    是的,这是可以做到的。您需要定义 []= [] 方法。

    在本例中,我使用 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'
    
    推荐文章