【问题标题】:emulate ruby's index accessor, []模拟 ruby​​ 的索引访问器,[]
【发布时间】:2013-11-07 15:54:49
【问题描述】:

我了解 Ruby 的语法糖如何让我们为这样的变量赋值

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

ExampleClass 有方法时:

name=(new_name)

这对于像Hash 这样的类有什么作用?如果我想这样做,我将如何命名我的方法?

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

我没有从 Hash 类继承。

【问题讨论】:

    标签: ruby hash syntactic-sugar


    【解决方案1】:

    你可以只有方法

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

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

    【讨论】:

    • 谢谢!!红宝石很棒
    • @x-treme 请记住,您可以“接受”此答案以奖励回答者并让其他用户知道此答案最能解决您的问题。
    【解决方案2】:

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多