示例阵列别名用于Ruby的数组或哈希元素
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
动机:我有一个很大的深层数据结构,你可以想象其余的。我想以只读方式使用它,但由于性能原因,复制是不允许的。
隐喻:我想从一个更大的数据结构中选择上下文,我想用一个简短的名字来访问它。
UPDATE:问题已解决,建议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}]
不,你不能。你可以用'self.y =“foo”'调用它,但不能用'y =“foo”'调用它。无论定义什么setter方法,'y =“foo”'将始终分配给局部变量'y'。 – sepp2k 2010-10-18 15:11:29
第二个片段需要是'self.y = foo',否则即使方法y在范围内,也会分配局部变量y。 – 2010-10-18 15:11:42
感谢您的修复。 – Jeremy 2010-10-18 15:13:14