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

Ruby中数组或散列元素的别名

  •  0
  • Notinlist  · 技术社区  · 16 年前

    数组示例

    arr = ["a", "b", "c"]
    # TODO create an alias for arr[1] as x
    x = "X"
    # arr should  be ["a", "X", "c"] here
    

    hash = { :a => "aaa", :b => "bbb" , :c => "ccc" }
    # TODO create an alias for hash[:b] as y
    y = "YYY"
    # hash should be { :a => "aaa", :b => "YYY" , :c => "ccc" } here
    

    以及变量的别名?

    var = 5
    # TODO create an alias for var as z
    z = 7
    # var should be 7 here
    

    隐喻:我想从一个更大的数据结构中选择上下文,我想用一个简短的名字访问它。

    更新

    irb(main):001:0> arr = [ { "a" => 1, "b" => 2}, { "x" => 7, "y" => 8 } ]
    => [{"a"=>1, "b"=>2}, {"x"=>7, "y"=>8}]
    irb(main):002:0> i = arr[0]
    => {"a"=>1, "b"=>2}
    irb(main):004:0> j = arr[1]
    => {"x"=>7, "y"=>8}
    irb(main):007:0> j["z"] = 9
    => 9
    irb(main):008:0> j
    => {"x"=>7, "y"=>8, "z"=>9}
    irb(main):009:0> arr
    => [{"a"=>1, "b"=>2}, {"x"=>7, "y"=>8, "z"=>9}]
    
    2 回复  |  直到 16 年前
        1
  •  4
  •   sepp2k    16 年前

    你想要什么是不可能的。在ruby中没有任何特性可以用来让你的例子按照你想要的方式工作。

    不过,既然你说你只想用只读的,那就没有必要了。你就可以 x = myNestedStructure[foo][bar][baz]

        2
  •  2
  •   Jeremy    16 年前

    您必须创建一个作为别名的方法,该方法将更新数据。

    def y=(value)
      arr[:b]=value
    end
    

    那就叫它吧。

    self.y="foo"