(后续我的早期问题,Ruby:如何在不指向同一对象的情况下复制变量?)
我正在编写一个简单的Ruby程序来在.svg文件中进行一些替换.第一步是从文件中提取信息并将其放入数组中.为了防止每次调用此函数时都从磁盘读取文件,我正在尝试使用memoize设计模式 - 在第一个调用后的每个调用中使用缓存结果.
为此,我使用的是一个在函数之前定义的全局变量.但即使我.dup在返回局部变量之前将变量改为本地变量,调用此变量的函数仍在修改全局变量.
这是我的实际代码:
#memoize to keep from having to read original file on each pass
$svg_filedata_cache = [] #the global variable
def svg_filedata(filename)
if $svg_filedata_cache.empty?
File.open(filename, "r"){|f| $svg_filedata_cache = f.readlines}
end
svg_filedata_cache = $svg_filedata_cache.dup #try to copy it
return svg_filedata_cache #SHOULD point to a different object (but doesn't)
end
Run Code Online (Sandbox Code Playgroud)
两个问题(回答其中一个或两个):
.dup复制它?我写了一些代码来获取用户的输入,然后根据我的需要改变它.我需要它以改变和未改变的形式,所以我将输入保存为两个变量.我不明白的是为什么两个变量都在变化.我尝试了一些额外的放置线来确定原因是什么,但我无法弄清楚.代码:
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
Run Code Online (Sandbox Code Playgroud)
使用输入:f:\ folder\subfolder\another
输出:
Folder 1: f:\folder\subfolder\another
Folder: folder/subfolder/another
Path: folder/subfolder/another/
Run Code Online (Sandbox Code Playgroud)
我想要的是获取一个目录并保留其他进程的目录,还要将其转换为URL友好格式.想法?
示例代码:
hash_of_array = { a: [] }
b = hash_of_array
c = hash_of_array
b[:a] << 1
puts b # => { a: [1] }
puts c # => { a: [1] }
Run Code Online (Sandbox Code Playgroud)
为什么两个变量的数组都有1?我只将它附加在变量上b.
试穿