ruby 数组中的元素是hash,改变一个元素的hash值,为什么所有元素的hash都会改变

Python012

ruby 数组中的元素是hash,改变一个元素的hash值,为什么所有元素的hash都会改变,第1张

终于明白你的意思了。这不是 hash 的问题,是 Array.new 的用法不对,你这样做是指用{}这个对象填充3遍,就是说是同一个对象填充了3次,所以无论你修改哪一个对象,其它的都会跟着变,因为是同一对象。

http://www.ruby-doc.org/core-2.2.0/Array.html#method-c-new-label-Common+gotchas

以上是 ruby 文档,他给出了正确的用法:

a = Array.new(2) { Hash.new }

ruby中一切都是对象,numeric 也支持step方法step(limit[, step]) {|i| block } 所以就是从3开始,步长为2,一直到n, 都传递给is_prime?方法,如果is_prime?返回真,就把这个数字添加到arr数组中。可以用ruby命令行执行一下就知道了。 比如 1.step(10, 2) { |i| print i, " " }就打印出1 3 5 7 9