相关疑难解决方法(0)

Ruby:如何复制这个数组?

(后续我的早期问题,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)

两个问题(回答其中一个或两个):

  1. 为什么接收和修改此处返回的值的其他函数也会影响全局变量,即使我曾经.dup复制它?
  2. 我是Ruby的新手,我确信这不是最常用的Rubyesque方式(而且我不喜欢全局变量).你能提出更好的策略吗?

ruby

5
推荐指数
2
解决办法
3960
查看次数

变化多变

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

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友好格式.想法?

ruby string variables

1
推荐指数
1
解决办法
102
查看次数

为什么在哈希中向数组追加一个值也会修改分配给它的另一个变量?

示例代码:

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.

试穿

  • Ruby版本2.3.1,2.4.0
  • Rbenv

ruby arrays hash

1
推荐指数
1
解决办法
93
查看次数

标签 统计

ruby ×3

arrays ×1

hash ×1

string ×1

variables ×1