2013-03-22 3 views
0

Я получил отличный ответ от вас, ребята, как я могу сохранить текст методов в txt-файл, но теперь у меня другая проблема. Дело в том, что программа генерирует случайный заголовок и печатает его в командной строке, но сохраняет полностью произвольный заголовок в файле. Например, если я запустил программу, он будет генерировать заголовок «Big Thing», но в txt-файле он сохранит «Маленькую игру». Есть ли способ заставить программу сохранить тот же заголовок, что и в CP? Код выглядит примерно так:Как я могу сделать ruby ​​сохранить тот же случайный сгенерированный заголовок в txt?

class Generator 
    def title_adj 
    title_adj = [ 
     "Big", 
     "Small"] 
    item_title_adj = title_adj[rand(title_adj.length)] 
    end 
    def title_noun 
    title_noun = [ 
     "Thing", 
     "Game"] 
    item_title_noun = title_noun[rand(title_noun.length)] 
    end 
    def title 
    title_adj + title_noun 
    end 
    def initialize(io) 
    @io = io 
    end 
    def all 
    @io.puts "Your story is called: " + title 
    end 
end 

fict_gen = Fiction_Generator.new(STDOUT) 
def prompt 
    print "> " 
end 
puts "Do you want to generate a new title or read the existing one?" 
puts "1 = Generate, 2 = Read existing" 

prompt; r = gets.chomp 
if r == "1" 
    fict_gen.all 

    File.open("Story.txt", "a+") do |file| 
    fict_gen = Fiction_Generator.new(file) 
    fict_gen.all 
    end 

elsif r == "2" 
    File.open("Story.txt").each_line{ |s| 
    puts s 
    } 
end 
+0

Вау, нужна помощь по рефакторингу на шестом проходе! STAT! –

ответ

0

Проблема в том, что вы произвольно генерируете заголовок каждый раз, когда вы вызываете метод. Докажите это себя:

a = Generator.new(STDOUT) 
a.title #=> "BigThing" 
a.title #=> "SmallThing" 
a.title #=> "BigThing" 

Решение, хранить заголовок в переменной экземпляра:

def title 
    @title ||= %w|Big Small|.sample + %w|Thing Game|.sample 
end 

Оператор ||= только выполняет задание, если приемник nil или false.