我有一些代码尝试在ruby文件中将'false'更改为'true',但它只在脚本运行时运行一次。
toggleto = true
text = File.read(filename)
text.gsub!("#{!toggleto}", "#{toggleto}")
File.open(filename, 'w+') {|file| file.write(text); file.close}
据我所知,只要我关闭一个文件,我就可以用之前写的内容读它,无论多少次来回更改它。
更大的背景:
def toggleAutoAction
require "#{@require_path}/options"
filename = "#{@require_path}/options.rb"
writeToggle(filename, !OPTIONS[:auto])
0
end
def writeToggle(filename, toggleto)
text = File.read(filename)
text.gsub!(":auto => #{!toggleto}", ":auto => #{toggleto}")
File.open(filename, 'w+') {|file| file.write(text); file.close}
end
def exitOrMenu
puts "Are you done? (y/n)"
prompt
if gets.chomp == 'n'
whichAction
else
exit
end
end
def whichAction
if action == 5
toggleAutoAction
else
puts "Sorry, that isn't an option...returning"
return 1
end
exitOrMenu
end
答案 0 :(得分:1)
问题出在这个方法中:
def toggleAutoAction
require "#{@require_path}/options" # here
filename = "#{@require_path}/options.rb"
writeToggle(filename, !OPTIONS[:auto])
0
end
Ruby不会再次加载options.rb
(即具有完全相同的路径名),因此您的!OPTIONS[:auto]
将仅被评估一次(否则您将获得一个已经定义的常量 - 警告,OPTIONS
中定义了options.rb
。请参阅Kernel#require
文档。
当然,你可以做一些疯狂的事情,比如
eval File.read("#{@require_path}/options.rb")
但我不建议(表现明智)。
如上所述above,从/向YAML文件读/写不那么痛苦; - )