【问题标题】:Ruby CSV variables/arrays manipulationRuby CSV 变量/数组操作
【发布时间】:2014-05-03 10:09:34
【问题描述】:

执行下面的代码时,first_namelast_name 变量/数组都给我相同的输出。

我认为这是有意的,但我只是不明白为什么,但是我如何在不改变另一个变量的情况下操纵这两个变量?

require 'csv'
INPUTFILE1 = ARGV[0]

CSV.foreach(INPUTFILE1, headers:true) do |row|
first_name = row['username']
first_name.sub!(/^[^,]+,/, "")

puts first_name

last_name = row['username']
    last_name.sub!(something that has yet to be tested)

puts last_name
end

【问题讨论】:

    标签: ruby csv


    【解决方案1】:

    问题是first_name 实际上只是对映射row 中的一个对象的引用。如果您不想更改地图本身,请使用dup

    first_name = row['username'].dup
    first_name.sub!(/^[^,]+,/, "")
    last_name = row['username'].dup
    last_name.sub!(something that has yet to be tested)
    

    dup 正在克隆您要处理的对象,这意味着它会创建一个新引用。因此更改first_name 不会影响row 中的值。这实际上是Prototype design pattern的实现

    在您的情况下,您也可以这样做:

    first_name = row['username']
    first_name = first_name.sub(/^[^,]+,/, "")
    

    因此sub 将为您创建新的参考。您无需就地进行更改。

    【讨论】:

      猜你喜欢
      • 2012-01-17
      • 2018-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-18
      相关资源
      最近更新 更多