切换true / false:在ruby中编辑文件

时间:2013-05-16 20:24:30

标签: ruby file

我有一些代码尝试在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

1 个答案:

答案 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文件读/写不那么痛苦; - )