Ruby “双”字;gsub";变量
是否可以在gsub方法的两个字段中使用变量? 我正试图让这段代码工作:Ruby “双”字;gsub";变量,ruby,variables,gsub,Ruby,Variables,Gsub,是否可以在gsub方法的两个字段中使用变量? 我正试图让这段代码工作: $I = 0 def random_image $I.to_s random = rand(1).to_s logo = File.read('logo-standart.txt') logo_aleatoire = logo.gsub(/#{$I}/, random) File.open('logo-standart.txt', "w") {|file| File.puts logo_aleatoire
$I = 0
def random_image
$I.to_s
random = rand(1).to_s
logo = File.read('logo-standart.txt')
logo_aleatoire = logo.gsub(/#{$I}/, random)
File.open('logo-standart.txt', "w") {|file| File.puts logo_aleatoire}
$I.to_i
$I += 1
end
提前谢谢
filecontents = File.read('logo-standart.txt')
filecontents.gsub!(/\d+/){rand(100)}
File.open("logo-standart.txt","w"){|f| f << filecontents }
这里,
randomnumbers
是一个散列,可以让您查找数字并找到它们对应的随机数。构造散列时传递的块告诉散列当它找到一个以前从未见过的数字时该怎么做——在本例中,生成一个新的随机数,并记住映射中的随机数。所以gsub
的块只要求哈希映射它的数字,randomnumbers
负责在遇到原始文件中的新数字时生成一个新的随机数。我不太明白这里的问题是什么,但是这里有三个关于代码的注意事项:首先,to_s
和to_i
没有副作用,因此不使用返回值调用它们根本没有任何作用。如果删除$I.to_s
和$I.to_I
行,代码的行为将完全相同。其次,rand(1)
将始终返回0,因为0是唯一小于1的非负整数。第三,使用全局变量的方式很糟糕。这可能会进入一个类,在这个类中,每个实例而不是全局保留一个计数器。哦,您编写了File.puts
,而您可能是指File.puts
-没有File.puts
方法。谢谢您快速完整的回答!)我会尽力更好地解释我的问题。我有一个数字从1到x(比如500)的文件,我希望该文件中的每个数字都被随机二进制值(0或1)替换。所以我试着迭代“I”,这样它就可以得到所有可能的值(从0到x)!我改正了错误。但它仍然不起作用:sOuaou谢谢你!成功了!这将需要一些时间来理解代码,但谢谢!
filecontents = File.read('logo-standart.txt')
randomnumbers = Hash.new{|h,k| h[k]=rand(100)}
filecontents.gsub!(/\d+/){|match| randomnumbers[match]}
File.open("logo-standart.txt","w"){|f| f << filecontents }