数组
的示例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
动机:我有一个很大的深层数据构建,你可以想象其余的。我想以只读方式使用它,但由于性能原因,不允许复制。
隐喻:我想从更大的数据结构中选择上下文,我想用一个简短的名称来访问它。
更新:问题已解决,因为sepp2k建议。我只是想在这里总结一下有关解决方案的图片。
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}]
答案 0 :(得分:4)
你想要的是不可能的。 ruby中没有可用于使您的示例按您所希望的方式工作的功能。
然而,既然你说你只想以只读方式使用它,那就没有必要了。你可以x = myNestedStructure[foo][bar][baz]
。当你这样做时,不会涉及复制。赋值不会复制ruby中的已分配对象。
答案 1 :(得分:2)
您必须创建一个作为别名的方法,这将更新数据。
def y=(value)
arr[:b]=value
end
然后打电话。
self.y="foo"
修改:更新了第二个代码段。