与函数(Ruby的初学者)突变可变

问题描述:

如何突变红宝石做了这一点:与函数(Ruby的初学者)突变可变

row = row.to_hash 

我已经试过row.to_hash!

但它不起作用。

编辑:这里是它的代码:

CSV.foreach('stores.csv', :headers => true) do |row| 
     row = row.to_hash 
    end 
+1

这是不是已经够短了?国家就地突变可能不值得大约4个字符保存打字。 –

+1

你的问题相当不清楚。哪一类是行的成员?你想要达到什么目的?如果您可以给出行的示例值,然后解释您希望生成的哈希的外观如何,这将有所帮助。此外,像这样变化变量类型通常会影响代码的易读性和可维护性;无论如何,将散列分配给新变量可能会更好。 –

+0

@AdamSpiers:更新了示例代码。 – Hopstream

除非我误解你的问题,你可以尝试:

rows = [] 
CSV.foreach('stores.csv', :headers => true) do |row| 
    rows << row.to_hash 
end 

它实际上不是突变,但它确实给你,你似乎在寻找的输出。使用单独的方法执行新输出操作与更改现有数据的原因之一是,通常情况下,让输入数据不可变是明智的。从CSV文件中读取可能并不适合这个范例(原始输入在某个文件中),这可能是为什么没有!版本的to_hash。

(可选)在我上面的代码中,你可以只处理哈希,并把结果放在你想要的地方,如果输入文件是巨大的以节省空间,而不是将所有的哈希放入数组,然后处理该数组。

实际上,我们不能说,如果有这样的方法。但是如果你得到NoMethodError,那很可能没有一个。 :)

+0

这确实是一个rails功能。 [这里](https://github.com/rails/rails/blob/4c30304e159b2a8fafb5b3c5c8b6d996e490e657/activerecord/lib/active_record/result.rb#L23) – Hopstream

+0

那么,这是'FlashHash'类。我不认为你在使用那个。 – tbuehlmann

+0

ActiveRecord .. https://github.com/rails/rails/blob/4c30304e159b2a8fafb5b3c5c8b6d996e490e657/activerecord/lib/active_record/result.rb#L23 – Hopstream