变化多变

时间:2011-10-25 14:04:25

标签: ruby string variables

我写了一些代码来获取用户的输入,然后根据我的需要改变它。我需要它以改变和未改变的形式,所以我将输入保存为两个变量。我不明白的是为什么两个变量都在变化。我尝试了一些额外的放置线来确定原因是什么,但我无法弄清楚。代码:

puts "Enter the full directory path of the flv files."
folder = gets.chomp
puts "Folder 1: " + folder
path = folder
path.slice!(0..6)
path.gsub!('\\', '/')
path += '/'
puts "Folder: " + folder
puts "Path: " + path

输入:f:\ folder \ subfolder \ another

输出:

Folder 1: f:\folder\subfolder\another 
Folder: folder/subfolder/another
Path: folder/subfolder/another/

我想要的是获取目录并保留其他进程的目录,还要将其转换为URL友好格式。想法?

2 个答案:

答案 0 :(得分:5)

path = folder # does not actually copy the object, copies the reference
path.object_id == folder.object_id # the objects are the same, see
path.slice!(0..6) # all bang methods work with the same object

因此,您的path是与folder相同的对象的引用。

要解决此问题,请使用

path = folder.clone

答案 1 :(得分:2)

当您执行b = a时,它会使b指向与a相同的值,因此当您使用a之类的内容更改slice!的值时},b也会指向更改后的值。

要避免这种情况,请改为复制对象:

b = a.dup