2013-05-16 58 views
0

我有一些代碼嘗試在ruby文件中將'false'更改爲'true',但它只在腳本運行時纔有效。切換真/假:在ruby中編輯文件

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

是不是該塊後自動關閉的文件,使您的通話冗餘? –

+0

好點,但它不能解決問題。 – JohnH

回答

1

在此方法中的問題規定:

def toggleAutoAction 
    require "#{@require_path}/options"   # here 
    filename = "#{@require_path}/options.rb" 
    writeToggle(filename, !OPTIONS[:auto]) 
    0 
end 

紅寶石不會加載options.rb的第二時間(即,具有完全相同的路徑名),因此,您的!OPTIONS[:auto]只會評估一次(否則您將得到一個恆定的已經定義的警告,只要OPTIONSoptions.rb中定義)。請參閱Kernel#require文檔。

你可以,當然,做瘋狂的東西一樣

eval File.read("#{@require_path}/options.rb") 

,但我不會建議(性能明智)。

如前所述above,讀/ /寫入到YAML文件就不會那麼痛苦;-)

+0

我相信你__could__'load(「#{ @require_path} /options.rb「)'而不是'eval',但像@ DMKE說的那樣,最好不要這樣做。 –

+0

當然......感謝您指出了這一點。 – JohnH

相關問題